我想知道是否有一種簡單的方法來確定Java類擴展或實現遞歸的類型的完整列表?找到所有類和接口一個類擴展或實現遞歸
例如:
class Foo extends Bar implements I1, I2 {...}
class Bar implements I3 {...}
interface I1 extends I4, I5 {...}
interface I2 {...}
interface I3 {...}
interface I4 {...}
interface I5 {...}
class ClassUtil {
public static Set<Class<?>> getAllExtendedOrImplementedTypesRecursively(Class<?> clazz){
???
}
}
import static org.junit.Assert.*;
public class ClassUtilTest {
@Test
public void shouldEqualClasses(){
Set<Class<?>> types = ClassUtil.getAllExtendedOrImplementedTypesRecursively(Foo.class);
Set<Class<?>> checklist = new HashSet<>();
checklist.add(Foo.class);
checklist.add(Bar.class);
checklist.add(I1.class);
checklist.add(I2.class);
checklist.add(I3.class);
checklist.add(I4.class);
checklist.add(I5.class);
assertTrue(checklist.containsAll(types));
assertTrue(types.containsAll(checklist));
}
}
想到的Arquillian拆封創建幫手。因爲Class對象沒有實現Comparable>我還需要找到一種創建Set(或類似的類)而不實現Comparable接口的方法(例如,完全依賴類的哈希碼目的)。
更新:更改測試使用哈希集。 DERP。
爲什麼?如果是爲了測試,只需自己編寫各種'instanceof'測試。不要依賴額外的代碼來進行測試。 – EJP