java泛型之泛型通配符具体是啥作用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java泛型之泛型通配符具体是啥作用?相关的知识,希望对你有一定的参考价值。

看图,可以解释下为什么吗?

Java中不允许嵌套泛型的内层通配符?匹配一个具体的类型,因为这可能破坏类型安全。
这样做是可以的:
List<?> list = new ArrayList<Integer>();
而这样做是不可以的:
List<List<?>> list = new ArrayList<List<Integer>>();追问

可以可以 你这个回答比较服众 ,但是我还想追问下,java为什么规定不可以嵌套泛型的内层通配符啊? 如果允许会造成什么后果呢?

追答

如果允许第二种写法,那么就会出现下面的问题:
List> list = new ArrayList>();
List sublist = new ArrayList();
list.add(sublist);
list.get(0).add(new Object());
结果是一个Object类型的对象被添加到了List中,破坏了类型安全。

参考技术A 占位作用,问号 ? (代表若干个类型)作为参数追问

为什么第一个也是泛型通配符预定义,实际传入时再确定就可以,第二种就不行了呢?不就是多层数据结构吗?怎么就编译不通过了呢?

以上是关于java泛型之泛型通配符具体是啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

Java重要技术(19)泛型之泛型的使用方法

泛型之泛型方法

java遗珠之泛型通配符

java遗珠之泛型通配符

Java泛型之通配符

java之泛型