Java 运行时如何获取泛型参数的类型

╰+攻爆jí腚メ 2022-09-30 15:51 276阅读 0赞

在 Java 中对于下面最简单的泛型类

class A {
public void foo() {
//如何在此处获得运行时 T 的具体类型呢?
}
}

设想我们使用时

new A().foo();

是否能在 foo() 方法中获得当前的类型是 String 呢?答案是否定的,不能。在 foo() 方法中 this 引用给不出类型信息,this.getClass() 就更不可能了,因为 Java 的泛型不等同于 C++ 的模板类,this.getClass() 实例例是被所有的不同具体类型的 A 实例(new A(), new A() 等) 共享的,所以在字节码中类型会被擦除到上限。

我们可以在 IDE 的调试时看到这个泛型类的签名

generic_signature-1.png

阅读全文 >>

发表评论

表情:
评论列表 (有 0 条评论,276人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java运行获得类型

    引言 众所周知,java泛型最重要的特征是泛型擦除,所有泛型在编译时会转换成Object所以在java中运行时无法获得泛型的类型。 但是其实以上的规则是针对方法的内部