Java中的上界通配符

Java中的上界通配符,java,generics,bounded-wildcard,Java,Generics,Bounded Wildcard,我有两个通用的方法来计算列表中元素的总和。方法的签名是 double method1(List由于类型擦除,最后执行的代码是相同的,因此使用一种方法与使用另一种方法没有区别 类型擦除的解释如下: 仅在编译时和编译时强制执行类型约束的过程 在运行时丢弃元素类型信息 由于您在此方法中没有使用U,因此它们没有区别。绝对没有区别,声明U的目的是让您可以使用它: public static <U extends Number> void doSomething(List<U> li

我有两个通用的方法来计算列表中元素的总和。方法的签名是


  • double method1(List由于类型擦除,最后执行的代码是相同的,因此使用一种方法与使用另一种方法没有区别

    类型擦除的解释如下:

    仅在编译时和编译时强制执行类型约束的过程 在运行时丢弃元素类型信息


    由于您在此方法中没有使用
    U
    ,因此它们没有区别。

    绝对没有区别,声明
    U
    的目的是让您可以使用它:

    public static <U extends Number> void doSomething(List<U> list, Consumer<U> sink) {
        list.forEach(sink::accept)
    }
    

    是的,我知道,有更简洁的方法可以做到这一点-请把它作为一个说明性的例子来对待

    我认为值得指出这一点-你可以在第二种方法中使用
    U
    。@kabanus谢谢。
    public static <U extends Number> void doSomething(List<U> list, Consumer<U> sink) {
        list.forEach(sink::accept)
    }
    
    public static <U extends Number> List<U> copy(List<U> list) {
        List<U> copy = new ArrayList<>();
        copy.addAll(list)
        return copy;
    }