查找类以递归方式扩展或实现的所有类和接口
2022-09-02 20:48:46
我想知道是否有一种简单的方法可以确定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 ShrinkWrap创建助手。
更新:由于Class对象没有实现Compeable>我还需要找到一种方法来创建一个Set(或类似的类),而无需实现Compable接口(例如,完全依赖于类对象的哈希码)。
更新:将测试更改为使用哈希集。derp.