为什么List <number>不等于List <integer> - 这个设计如何有用?

时间:2016-09-30 11:15:05

标签: java generics

package test;

import java.util.ArrayList;
import java.util.List;

public class Test3 {

    public static void main(String[] args) {
        List<Number> number = new ArrayList<Number>();
        number.add(new Integer(10));
        number.add(new Double(10));
        List<Integer> inte = new ArrayList<Integer>();
        List<Number> numInt = new ArrayList<Integer>(); // compile error
        sum(number);
        sum(inte); // compile error
    }

    public static void sum(List<Number> n){

    }
}

我理解List<Number>与Java Docs中的List<Integer>不等。 Object是两者的父类。

如果您想传递数字的子类型,请执行public static void sum(List<? extends Number> n)public static <T extends Number> void(List<T> n)

我的问题: List<Number>可以包含Number Integer Double的混合。然而,只有Number中存在的方法才能在sum方法中访问。即使我List<? extends Number>代替List<Number>,这也只允许我访问Number的方法。

那么,考虑List<Number>不等于List<Integer>,提供了什么用处/目的? (也就是说,这种限制有用吗?)为什么我们需要单独的语法List<? extends Number>

0 个答案:

没有答案