Java泛型中的子类型、通配符与数组处理
1. 泛型子类型关系
在Java中,泛型的子类型关系与我们的直观理解有所不同。例如, List<Integer> 不是 List<Number> 的子类型,反之亦然。这意味着不能将 List<Integer> 类型的对象赋值给 List<Number> 类型的变量。示例代码如下:
List<Integer> ints = Arrays.asList(1, 2, 3);
List<Number> nums = ints; // 编译时错误
nums.set(2, 3.14);
assert ints.toString().equals("[1, 2, 3.14]"); // 错误!
这里,由于 List<Integer> 不是 List<Number> 的子类型,第二行代码会在编译时出错。这与数组的子类型关系形成了鲜明对比。在Java中,数组的子类型是协变的,即如果 S 是 T 的子类型,那么 S[] 是 T[] 的子类型。比如:
Integer[] ints = new Integer[] {1
超级会员免费看
订阅专栏 解锁全文
8400

被折叠的 条评论
为什么被折叠?



