什么时候用java泛型_Java泛型何时在运行时使用转换?

这是我写的一个简短的程序:

public class Test {

public T contents;

public Test(T item) {

contents = item;

}

public static void main(String[] args) {

Test t = new Test("hello");

System.out.println(t.contents);

}

}

尝试用javac编译它,然后用javap -verbose查看字节码.我选择了几条有趣的线条:

public java.lang.Object contents;

这应该在Test构造函数的定义之前出现.在示例代码中,它是T类型,现在它是一个Object.这是擦除.

现在,看一下主要方法:

public static void main(java.lang.String[]);

Code:

Stack=3,Locals=2,Args_size=1

0: new #3; //class Test

3: dup

4: ldc #4; //String hello

6: invokespecial #5; //Method "":(Ljava/lang/Object;)V

9: astore_1

10: getstatic #6; //Field java/lang/System.out:Ljava/io/PrintStream;

13: aload_1

14: getfield #2; //Field contents:Ljava/lang/Object;

17: checkcast #7; //class java/lang/String

20: invokevirtual #8; //Method java/io/PrintStream.println:(Ljava/lang/String;)V

23: return

然后我们可以在第17行看到checkcast命令,就在println之前 – 这是Java从Object转换为擦除的泛型类型的字符串 – String

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值