有一个方法, 需要传入所有类型的Number集合, 包括 List<Integer>, List<Double>, 设计一下方法签名
不能使用这种方法签名doSomething(List<Number> numbers) , 会报 doSomething(java.util.List<Number> numbers) can't applied to java.util.List<Integer>
使用以下两种方法签名都可以编译通过
1 | doSomething(List<? extends Number> numbers) |
建议使用第一种, 这样对方法的参数没有做侵入, 让调用明确知道需要传入List<Number >
两个擦出后一样的方法签名编译能否成功, 比如 void do(List<Integer> numbers), void do(List<Double> numbers)
不会, 编译器会认为这两个方法签名一样, both method has same erasure
泛型赋值的问题
List<Integer> 是不能赋值给 List<Number>的, 但可以赋值给 List<? extends Number>, eg:
1 | List<Integer> integers = new ArrayList<>(); |