我正在尝试定义一个List对象,然后使用下面的代码向它添加对象:
List<? extends File> newFiles = new ArrayList<? extends File>();
当我尝试像那样定义它时,我得到编译器错误
无法实例化类型
ArrayList<? extends File>
,而
List<? extends File> newFiles = new ArrayList<File>()
似乎有效。目前尚不清楚原因。
File是我创建的bean对象 - 而不是属于Java API的对象。
答案 0 :(得分:6)
您无法直接实例化通配符类型。在这种情况下,那将是? extends File
。
您可以做的只是使用File
,因为extends
意味着上限关系(您可以保证该集合中的元素位于最少 { {1}})...
File
...或者您可以在Java 7+中使用钻石符号,这在当今更为惯用。
List<? extends File> newFiles = new ArrayList<File>();
经过一些重新思考后,你确定你想要那个通配符吗?使用泛型,如果您使用绑定类型,要记住的规则是 PECS - 生产者扩展,消费者超级。作为制作人,尽管该列表是空的,但该列表无法进一步添加。
为您的用例完全取消泛型类型绑定可能更好。