【问题标题】:Generic Wildcard Bounded Type vs Generic Bounded Type Parameter [duplicate]通用通配符有界类型与通用有界类型参数[重复]
【发布时间】:2015-08-30 09:12:48
【问题描述】:

在了解 Java 泛型的过程中,我遇到了这个问题:

public static <T extends Number> int sumListElems(List<T> list){
   int total = 0;
   for(Number n: list)
       total += n.intValue();
   return total;
}

假设我有以下方法可以添加列表的元素,仅限于包含数字的列表。

但是那个代码和这个有什么区别:

public static int sumListElems(List<? extends Number> list){
   int total = 0;
   for(Number n: list)
      total += n.intValue();
   return total;
}

它们都按预期编译和执行。这两者有什么区别?除了语法?我什么时候更喜欢使用通配符而不是前者?

嗯,是的,使用通配符方法,我不能在列表中添加新元素,除了 null,否则它不会编译。但除此之外呢?

【问题讨论】:

标签: java oop generics bounded-wildcard bounded-types


【解决方案1】:

在这种情况下没有区别。对于更复杂的签名,您可能需要重用已定义的类型,因此需要对其进行定义。比如:

public static <T extends Number> void foo(T bar, List<T> myList)...

这不仅保证了barmyList 的元素都扩展了Number,而且它们的类型相同。您无法使用其他语法强制执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    相关资源
    最近更新 更多