ArrayList<?>[] arr = new ArrayList<?>[2];
但以下两个不是?
ArrayList<? extends Object>[] arr = new ArrayList<? extends Object>[2]; ArrayList<? super Object>[] arr = new ArrayList<? super Object>[2];
最后两行生成编译错误;
error: generic array creation.
请澄清差异.
更新
另一方面,ArrayList<?> [] arr = new ArrayList<?> [2];编译好但是
ArrayList<?> arr = new ArrayList<?>();
不.
解决方法
>类型绑定(即扩展对象)只能在声明类型时被声明,在实例化对象时不能使用.
例如
ArrayList的< ;?扩展对象> ab = new ArrayList<? extends Object>(); //错误
ArrayList的< ;?扩展对象> ac = new ArrayList< String>(); // 好的
>数组不支持类型参数,例如:
列表< Integer> [] arrayOfLists = new List< Integer> [2]; //编译时间错误
列表与LT;整数> list = new List< Integer>(); // 好的
Oracle记录了此限制here的原因.
><?>可以在声明一个类型参数和数组时使用.它被添加以帮助在混合使用和不使用泛型的Java代码时避免“未检查的异常”错误.这意味着“未知的通用类型”.无限通卡here的更多细节.
ArrayList<?> [] arr = new ArrayList<?> [2];
由于上述原因是有效的.然而,它的使用非常有限,因为只能将null分配给声明为<?> ;.的类型. arr [0] = null; //编译 arr [1] = new Object(); //编译时间错误 Oracle提供以下Guide on using wildcards,这将有助于了解何时使用这个通配符.
><?>不能用于实例化对象.例如
的ArrayList<?> arr = new ArrayList<?>(); //不编译
的ArrayList<?> arr2 = new ArrayList<(); //但是这样做 的ArrayList<?> arr3 = new ArrayList< String>(); //这样做
然而,仍然存在使用<?>只接受null.
arr3.add(“”); //即使使用String实例化也不会编译
arr3.add(null); //编译很好
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。