List如何在java中包含不同的类型?

时间:2016-02-10 19:22:55

标签: java generics

我正在学习Java泛型和通配符,知道对于List<>,我们总是只允许它包含的所有元素中的一种类型。但是,当我以这种方式编写代码时(可能称为producer-extend和consumer-super?),允许在我创建的列表中存在多种类型!

我是否误解了type safe一词?实际上,我发现为什么我必须做producer-extend and consumer-super

真的很混乱
public static void wildcard(List<? super Integer> list) {
        list.add(1); 
    } 

    public static void main(String[] args) {
        List<Object> list = new ArrayList<>();
        list.add("String");
        wildcard(list);

        System.out.println(list);
    }
  

[String,1]

2 个答案:

答案 0 :(得分:7)

当然,没有什么特别之处。你有一个List<Object>。你可以写

Object a = "String";
Object b = 1;

...演示Object可以是StringInteger,就像List可以是ArrayList或{{1}一样}}。 LinkedList可以容纳各种对象。使用List<Object>实际上告诉编译器这可以包含任何类型的对象,并且您愿意接受相关的类型安全问题。

答案 1 :(得分:-3)

不,你不要误会。

所有类型安全性在运行时通过称为类型擦除的过程被删除。因此任何列表都可以存储从Java.lang.object继承的任何内容。

泛型允许测量数量的类型安全性。 ?允许一种中途宿舍。