[英]How does getClass().getName() return class name of the generic type?
我知道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();
}
}
輸出:
Type of T is 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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.