簡體   English   中英

getClass()。getName()如何返回通用類型的類名稱?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM