Java编程:泛型、流与多线程的深入探索
1. Java泛型与类型擦除
在Java中,泛型是静态类型系统的一部分,而非动态系统。像通配符或者简单使用 Comparable 都无法完全表达某些约束。例如, List<Integer> 只是静态类型,而 List 既是静态类型也是动态类型。在运行时,类型参数并不存在,这种情况被称为类型擦除。虽然运行时表达式如 x instanceof List 是有效的,但泛型的类型信息在运行时会被擦除。泛型的世界非常丰富,这里只是触及了冰山一角,还有无界通配符、具体化和通配符捕获等内容值得进一步探索。
2. 类型可变性
Java使用 List<? extends Animal> 来接受羊列表或牛列表等,而不是简单的 List<Animal> ,这是有原因的。示例如下:
List<Horse> horses = List.of(new Horse());
List <Cow> cows = List.of(new Cow());
List <Animal> animals;
animals = horses; 这个赋值是非法的。因为如果合法, animals.add(new Cow()) 这个静态正确的调用会将一头牛添加到马的
超级会员免费看
订阅专栏 解锁全文
1009

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



