Java通用通配符扩展

时间:2016-10-18 05:36:41

标签: java generics extends bounded-wildcard

为什么我不能在这种类型的列表中添加整数,即使Integer扩展了Number>

List<? extends Number> numList = new ArrayList<Integer>(); 
Integer f = 12;
numList.add(f);

4 个答案:

答案 0 :(得分:3)

在PECS原则上查看this post。相关报价:

  

您想要向集合中添加内容。
  然后列表是消费者,因此您应该使用Collection<? super Thing>

简而言之,您希望使用super而不是extends

List<? super Number> numList = new ArrayList<>(); 
Integer f = 12;
numList.add(f);

答案 1 :(得分:2)

如果您想存储任何类型的号码,您只需执行以下操作:

List<Number> numList = new ArrayList<Number>();

答案 2 :(得分:0)

如果要将元素添加到列表中,则需要使用超级关键字。

List<? super Integer> numList = new ArrayList<Integer>(); 

然后再做

 numList.add(10);

答案 3 :(得分:0)

该列表可以定义为List,也可以列出其他类型,在这种情况下,编译器不允许将Integer存储到List中:这会在类型安全功能中产生问题。

如果您需要您可以使用此

Date:   2016-10-18 08:58:28
Fatal: array(
    ['type'] => 16384, 
    ['message'] => 'This class is deprecated since 3.2 and will be removed with the 4.0 release.Use Sonata\BlockBundle\Block\Block\Service\AbstractBlockService instead.', 
    ['file'] => '/www/managedoc/branch/hoffereka/app/cache/superadmin_dev/classes.php', 
    ['line'] => 8575, 
)