8.5.2 对泛型表达式的编译
由于泛型方法的返回值被擦除了,所以当调用这个方法的时候,编译器会对泛型方法调用的返回值施加cast。例如:
Pair
<Employee> buddies
= ...;
Employee buddy
= buddies
.getFirst();
getFirst的擦除版本具有返回值类型Object。编译器自动添加cast操作符(Employee)。可见,编译器将对该条泛型方法的调用翻译成两条VM指令: ① 擦除版本的方法调用 Pair.getFirst,(返回值类型为Object) ② 返回值类型cast成泛型版本Employee cast也发生于泛型字段的访问。假设Pair类的first和second字段是public的,下面的表达式
Employee buddy
= buddies
.first
;
也会在buddies.first的结果前插入cast。