gpt4 book ai didi

java - getClass().getName() 如何返回泛型的类名?

转载 作者:行者123 更新时间:2023-11-29 08:28:54 26 4
gpt4 key购买 nike

我知道 java 对泛型使用类型删除并且 java 文档说 getClass() 返回对象的运行时类,但下面的程序打印泛型类型的类名。
代码:

    public class Gen<T> {
T ob;
public Gen(T ob) {
this.ob=ob;
}
void showType() {
System.out.println("Type of T is "+ ob.getClass().getName());

}

}


public class GenDemo {

public static void main(String[] args) {
Gen<String> str = new Gen("abcd");
str.showType();

}

}

输出:
T的类型是java.lang.String

这个程序是如何工作的?如何获取非具体化类型的运行时类?

编辑

    public class Gen<T> {
T ob;
T ob1=ob;
public Gen(T ob) {
this.ob=ob;
}
void showType() {
System.out.println("Type of T is "+ ob.getClass().getName());

}
void showType1(){
System.out.println(ob1.getClass().getName());
}

}
public class GenDemo {

public static void main(String[] args) {
Gen<String> str = new Gen("abcd");
str.showType();
str.showType1();

}

}



output:

Exception in thread "main" java.lang.NullPointerException
at Gen.showType1(Gen.java:13)
at GenDemo.main(GenDemo.java:7)

为什么 ob1 上的相同方法调用不起作用?

最佳答案

obj 指的是一个实际对象(String 类型)。在运行时,非基本对象会随身携带它们的类型信息,这就是 getClass() 返回的内容。

这并没有真正受到泛型的影响(尤其是因为泛型在运行时不存在)。这与您执行以下操作完全一样:

Object ob = "abcd";
System.out.println(ob.getClass().getName());

关于java - getClass().getName() 如何返回泛型的类名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49954764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com