【发布时间】:2020-07-30 18:54:29
【问题描述】:
在编译时,javac erases 泛型有界类型并将其替换为上限。
例如编译器会转换
<T extends Base> void foo(T p) {}
到
void foo(Base p) {}
在这种特定情况下,我认为泛型绝对比其他选项更受欢迎。但我想知道具体的优势。
【问题讨论】:
-
不等价。仅在编译之后。但是在编译期间,编译器可以使用实际的
T来确保类型安全,而不仅仅是Base。因此,仅仅因为泛型在运行时被删除,并不意味着它们没有用。编译器可以确保完全的泛型类型安全。因此,在系统已经被验证为正确和安全之后,保持泛型存活并没有多大意义(尽管这并不完全正确)。 -
@Zabuzard 很好的解释!所以问题是,我应该在更广泛的范围内看待它,因为好处确实存在于编译之前发生的事情。
标签: java generics type-erasure