美文网首页
提示二十六

提示二十六

作者: 飞絮搅青冥 | 来源:发表于2022-06-29 23:46 被阅读0次

今天来看提示二十六:不要使用原始类型。

一个类或接口,它的声明有一个或多个类型参数,被称之为泛型类或泛型接口。

每个泛型定义了一组参数化类型,它们由类或接口名称组成,后跟一个与泛型类型的形式类型参数相对应的实际类型参数的尖括号列表。

每个泛型定义了一个原始类型,它是没有任何类型参数的泛型类型的名称。 原始类型的行为就像所有的泛型类型信息都从类型声明中被清除一样。 它们的存在主要是为了与没有泛型之前的代码相兼容。

如果你使用原始类型,则会丧失泛型的所有安全性和表达上的优势。原始类型就是不加尖括号的形式,这样逃避了泛型检查,会把一些原来在编译阶段就能暴露的错误拖到执行阶段才暴露出来。

List string1 = new ArrayList<String>();
string1.add(new Date()); //不会报错
string1.add("234");

List<String> string2 = new ArrayList<String>();
string2.add(new Date()); //编译会报错
string2.add("234");

原始类型 List 和参数化类型 List<Object> 之间的区别是前者已经选择了泛型类型系统,而后者明确地告诉编译器,它能够保存任何类型的对象。比如List<Object> list = new ArrayList<String>();这行代码就会报错,如果用原始类型就没有问题。文中举了这样一个例子:

public static void main(String[] args) { 

    List<String> strings = new ArrayList<>(); 

    unsafeAdd(strings, Integer.valueOf(42)); 

    String s = strings.get(0); // Has compiler-generated cast 

}

private static void unsafeAdd(List list, Object o) { 

    list.add(o); 

}

直接把这个对象赋值给String就会报错,但是我发现只要不把这个对象转成String就没有问题,下面的代码就可以正常运行。

public void main(String[] args) {
        List<String> strings = new ArrayList<>();
        unsafeAdd(strings, Integer.valueOf(42));
        System.out.println(strings);//[42]
        List<Object> objects = new ArrayList<>();
        objects.addAll(strings);
        System.out.println(objects);//[42]
        System.out.println(objects.get(0)); //42
    }
    
  

无限制通配符 Set<?> 与原始类型 Set 更加安全,你不能把任何元素(除 null 之外)放入一个 Collection<?> 中。

必须使用原生态类型的场景:

  1. 在类字面值(class literals)中使用原始类型。
  2. 在使用instanceof操作符的时候。

相关文章

  • 提示26Shell游戏

    今天继续学习提示二十六有关Shell游戏的内容,先看提示: 提示二十六:发挥 Shell 命令的威力。 作者通过木...

  • 提示二十六

    今天来看提示二十六:不要使用原始类型。 一个类或接口,它的声明有一个或多个类型参数,被称之为泛型类或泛型接口。 每...

  • 原子重组

    二十六 欧耶正一筹莫展之际,脑中的游戏界面突然冒出了一个选项“游戏提示”。 抱着试试看的态度,他进入了“游戏提示”...

  • 门道文化|兰州太平鼓: 铿锵有力,风格独特

    门道提示: 农历十月二十六 关于太平鼓的来源,众说不一,明朝大将徐达为同意河山奉命西征,久攻兰州王保保成不克,于是...

  • 冬日随笔

    都说养成习惯的时间是二十一天,今天看了一下系统,提示我已经连续更文二十六天了。每天到了这个时候就会自己打开...

  • 愚蠢的计划

    下午六点二十六分,小喆看到左手那只棕色手表显示的时间。她和身旁站在路口的人群一样,在等着对面绿灯的提示。 天色渐渐...

  • 第二十六课 ДВАДЦАТЬ ШЕСТОЙ УРОК

    单词 Слова: двадцать шесть(数)二十六 двадцать шестой(数)第二十六 дос...

  • 战场格斗中“刀术”:远刺近劈,威力无比

    门道提示:农历四月二十六 刀在古代是一种单刃的砍杀兵器。它由刀身和刀柄构成,刀身较长,脊厚刃薄,适于劈砍。在原始社...

  • 门道文化|晋剧: 婉转细腻的抒情戏曲

    门道提示: 农历九月二十六 晋剧是山西省四大梆子剧种之一,因产生于山西中部,故又称中路梆子,外省称之为山西梆子,主...

  • 收费小风波

    有二十六的孩子交的现金,收了2万6千元的现金去会计那交钱。验钞机验的过程中,有张提示的是假币。我好担心哟,因为...

网友评论

      本文标题:提示二十六

      本文链接:https://www.haomeiwen.com/subject/fioxbrtx.html