8.5.2 对泛型表达式的编译

mac2022-06-30  164

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。

最新回复(0)