Ich frage mich, ob es eine einfache Möglichkeit gibt, die vollständige Liste der Typen zu bestimmen, die eine Java-Klasse rekursiv erweitert oder implementiert?finde alle Klassen und Schnittstellen, die eine Klasse rekursiv erweitert oder implementiert
zum Beispiel:
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));
}
}
Denken Arquillian ShrinkWrap Schaffung Helfer.
UPDATE: aufgrund der Klasse Objekt nicht vergleichbar Implementierung> Ich brauche auch ohne die Umsetzung die Schnittstelle Comparable ein Set (oder Klasse) zu schaffen, einen Weg finden (zum Beispiel allein auf dem Hash-Code der Klasse unter Berufung Objekt).
UPDATE: änderte den Test, um hashset zu verwenden. derp.
Warum? Wenn es für einen Test ist, schreiben Sie einfach die verschiedenen 'instanceof'-Tests selbst. Verlassen Sie sich nicht auf zusätzlichen Code, der nur zum Testen zur Verfügung steht. – EJP