map泛型 map不指定泛型 与 Map<Object,Object>的区别

map泛型 map不指定泛型 与 Map<Object,Object>的区别


private void viewDetail(){
    Map map1 = new HashMap();
    Map<String,Object> map2 = new HashMap<String,Object>();
    Map<Object,Object> map3 = new HashMap<Object,Object>();
    Map<String,String> map4 = new HashMap<String,String>();
    test1(map1);
    test1(map2);
    test1(map3);    //编译错误
    test1(map4);    //编译错误
}

private void test1(Map<String,Object> map){
}

在泛型这里 Object 就只表示Object 不能表示所有对象

因为泛型是保证编译时你给的实际类型和参数声明的类型一致,它的意义就在于此,不需要解释,这是需要你学习的规则而已。

那为什么map1就可以呢,这里有历史原因,因为泛型是后加入的,早期的版本没有,但是java的开发者希望不能因为加入泛型就要修改成千上万的现有应用,所以默认他可以通融老版本不加泛型的变量,但是编译时一定会有提示你有危险代码的。

正因为这样,泛型非常的好破,随便写点代码就可以让编译通过,而运行时错误,所以现在开发,一定要使用一种代码,千万不要两者都用,那样太危险,如果你用了泛型,就全部都用,切记切记

原文地址:https://www.cnblogs.com/zhuhui-site/p/10037753.html

时间: 2024-11-06 07:16:46

map泛型 map不指定泛型 与 Map<Object,Object>的区别的相关文章

自定义实现JavaScript的Map对象,修改IE不兼容MAP()的问题

由于IE8及以下版本不支持Map对象,本文为程序猿们提供了有效的解决方法. 本文重写了Map对象,实现了常用的set, get, put, clear, remove, delete, forEach, has, containsKey, isEmpty, size 等方法,使用和声明的方试和正常声明Map对象一样: var map = new Map(); 只需将下面代码拷入<script type="text/javascript"></script>中即可

使用HashMap需要注意的事儿:不要暴露Map.entry给外部不可信代码Map.entrySet()

Map/HashMap是java中一种很常用的数据结构,一般我们在应用中做的事情就是调用put向容器写入数据或者是get从容器读取数据.Map.entrySet()这个方法返回了键值对的集合,也是JDK官方推荐的遍历Map的方式. Set<Map.Entry<String, String>> allEntrys = maps.entrySet(); for (Map.Entry<String, String> as : allEntrys) { String key =

开发Android Map程序 如何获取 apikey (Google Map API v2)

1. 在Eclise --> preference --> android --> bulid 能够看到缺省的debug keystore:注意,最新版本的Android Eclipse中无需再自己产生MD5 和 SHA1 2. 登录Google网站账户后转到如下网址 https://console.developers.google.com/project/apps~soft-edu/apiui/api?authuser=0:在该页面中点击APIs然后将Google Maps Andr

使用HashMap须要注意的事儿:不要暴露Map.entry给外部不可信代码Map.entrySet()

Map/HashMap是java中一种非经常常使用的数据结构,一般我们在应用中做的事情就是调用put向容器写入数据或者是get从容器读取数据. Map.entrySet()这种方法返回了键值对的集合,也是JDK官方推荐的遍历Map的方式. Set<Map.Entry<String, String>> allEntrys = maps.entrySet(); for (Map.Entry<String, String> as : allEntrys) { String k

Java 泛型(一) 泛型使用基础

泛型Generics 所谓泛型,就是变量类型的参数化. 泛型是JDK1.5中一个最重要的特征.通过引入泛型,我们将获得编译时类型的安全和运行时更小的抛出ClassCastException的可能. 在JDK1.5中,你可以声明一个集合将接收/返回的对象的类型. 使用泛型时如果不指明参数类型,即泛型类没有参数化,会提示警告,此时类型为Object. 为什么使用泛型 使用泛型的典型例子,是在集合中的泛型使用. 在使用泛型前,存入集合中的元素可以是任何类型的,当从集合中取出时,所有的元素都是Objec

java 反射和泛型-反射来获取泛型信息

通过指定对应的Class对象,程序可以获得该类里面所有的Field,不管该Field使用private 方法public.获得Field对象后都可以使用getType()来获取其类型. Class<?> type = f.getType();//获得字段的类型 但此方法只对普通Field有效,若该Field有泛型修饰,则不能准确得到该Field的泛型参数,如Map<String,Integer>; 为了获得指定Field的泛型类型,我们采用: Type gType = f.getG

为什么要使用泛型?怎么用泛型?

一般在创建对象时,将未知的类型确定具体的类型.当没有指定泛型时,默认类型为Object类型,我们在获取这个类型的时候拿到的也是Object,虽然可以进行强制转换,但是可能会发生类型转换异常java.lang.ClassCastException运行时异常,比如: public static void main(String[] args) { // method1(); Map<String, Object> map = new HashMap<>(); map.put("

泛型-通配符,受限泛型(上限和下限)

掌握通配符“?”的使用. 掌握受限泛型的设置. 掌握泛型与子类继承的限制. 具体内容 1.1匹配任意类型的通配符 在开发中对象的引用传递(向上向下传递)是最常见的,但是,在泛型的操作中,在进行引用传递的时候泛型类型必须匹配才可以传递,否则不能传递. 例如,如下没有进行泛型类型匹配,一个是String,一个是Object类型. package Thread1; class Info<T>{ private T var ; // 定义泛型变量 public void setVar(T var){

编写高质量代码改善C#程序的157个建议[优先考虑泛型、避免在泛型中声明静态成员、为泛型参数设定约束]

前言 泛型并不是C#语言一开始就带有的特性,而是在FCL2.0之后实现的新功能.基于泛型,我们得以将类型参数化,以便更大范围地进行代码复用.同时,它减少了泛型类及泛型方法中的转型,确保了类型安全.委托本身是一种引用类型,它保存的也是托管堆中对象的引用,只不过这个引用比较特殊,它是对方法的引用.事件本身也是委托,它是委托组,C#中提供了关键字event来对事件进行特别区分.一旦我们开始编写稍微复杂的C#代码,就肯定离不开泛型.委托和事件.本章将针对这三个方面进行说明. 这里也有一篇之前我对泛型的简