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

xxx*_*222 3 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);
    }
Run Code Online (Sandbox Code Playgroud)

[String,1]

Lou*_*man 7

当然,这没什么特别的.你有一个List<Object>.你可以写

Object a = "String";
Object b = 1;
Run Code Online (Sandbox Code Playgroud)

......展示一个Object可以是一个String或一个Integer,就像一个List可以是一个ArrayList或一个LinkedList.A List<Object>可以容纳各种物体.使用a List<Object>本质上告诉编译器这可以包含任何类型的对象,并且您愿意接受相关的类型安全问题.