簡體   English   中英

如何獲得對象是其實例的所有接口和類?

[英]How to get all the interfaces and classes that an object is an instance of?

我有一堆代理對象,除了代理之外,我還需要確定這些對象是哪些類和接口。 換句話說,我實際上不是在尋找instanceof運算符,而是在尋找所有instanceof對於特定對象返回true的類和接口。

您可以使用反射來確定這一點。 從根本上講,Java Class類包含列出接口和超類的訪問器。

Class clazz = someObject.getClass();
clazz.getInterfaces();
clazz.getSuperclass();

您應該進一步了解Java Reflection API。 一個好的地方可能是從Class文檔開始。

您應該使用Class.getInterfaces()Class.getSuperclass()方法。 我相信這些將需要遞歸; 一個例子是:

<T> Set<Class<? super T>> getSuperclasses(Class<? super T> clazz) {
    Set<Class<? super T>> superclasses = new HashSet<>();
    if (clazz.getSuperclass() != null) {
        superclasses.addAll(getSuperclasses(clazz.getSuperclass()));
    }
    return superclasses;
}

和接口:

<T> Set<Class<? super T>> getSuperInterfaces(Class<T> clazz) {
    Set<Class<? super T>> superInterfaces = new HashSet<>();
    if (clazz.getInterfaces().length != 0) {
        // Only keep the one you use
        // Java 7:
        for (Class<?> superInterface : clazz.getInterfaces()) {
            // noinspection unchecked
            superInterfaces.add((Class<? super T>) superInterface);
        }
        // Java 8:
        // noinspection unchecked
        Arrays.stream(clazz.getInterfaces()).map(c -> (Class<? super T>) c).forEach(superInterfaces::add);
    }
    return superInterfaces;
}

使用Reflection API,您可以實現所需的功能。 您將必須掃描要搜索實現的類的包或擴展特定的接口/類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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