開發與維運

反射獲取類結構信息 | 帶你學《Java語言高級特性》之八十五

上一篇:反射與單例設計模式 | 帶你學《Java語言高級特性》之八十四
【本節目標】
本節介紹了利用反射獲取類的基本信息(Package),一個類的基本信息主要包括類所在的包名稱、父類的定義、父接口的定義。

反射獲取類結構信息

在反射機制的處理過程之中,不僅僅只是實例化對象的處理操作,更多的情況下還有類的組成結構操作,任何一個類的基本組成結構都是父類(父接口)、包、屬性、方法(構造方法、普通方法)。

獲取類的基本信息

一個類的基本信息主要包括類所在的包名稱、父類的定義、父接口的定義。
範例:定義一個程序類
IMessageService:

interface IMessageService {
    public void send();
}

IChannelService:

interface IChannelService {
    public boolean connect();
}

AbstractBase:

public abstract class AbstractBase {

}

Person:

public class Person extends AbstractBase implements  IChannelService,IMessageService {
    @Override
    public boolean connect() {
        return true;
    }
    @Override
    public void send() {
        if (this.connect()) {
            System.out.println("【信息發送】www.mldn.cn");
        }
    }
}

如果此時想獲得該類的一些基礎信息則可以通過Class類中的如下方法:
1、獲取包名稱:public Package getPackage()
2、獲取繼承父類:public Class<? super T> getSuperclass()
3、獲取實現父接口:public Class<?>[] getInterfaces()

範例:獲得包名稱

public class JavaAPIDemo {
    public static void main(String[] args) {
        Class<?> cls = Person.class;//獲取指定類的Class對象
        Package pack = cls.getPackage();//獲取指定類的包定義
        System.out.println(pack.getName());//獲取包名稱
    }
}

範例:獲取父類信息

public class JavaAPIDemo {
    public static void main(String[] args) {
        Class<?> cls = Person.class;
        Class<?> parent = cls.getSuperclass();//獲取指定類的Class對象
        System.out.println(parent.getName());
        System.out.println(parent.getSuperclass().getName());
        // System.out.println(parent.getSuperclass().getSuperclass());
    }
}

範例:獲得父接口

public class JavaAPIDemo {
    public static void main(String[] args) {
        Class<?> cls = Person.class; //獲取指定類的Class對象
        Class<?> clazz[] = cls.getInterfaces();//獲取父接口的Class對象
        for (Class<?> temp : clazz){
            System.out.println(temp.getName());//獲取父接口的對象名稱
        }
    }
}

當獲取了一個類的Class對象後,就意味著這個對象可以獲取類中的一切繼承結構信息。

想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。
本內容視頻來源於阿里雲大學

更多Java面向對象編程文章查看此處

Leave a Reply

Your email address will not be published. Required fields are marked *