Мне очень неудобным способом будет следующий:
public Test3()
{
Class<?> parentClass = this.getClass().getSuperclass();
if(Extenders.extendingClasses.containsKey(parentClass.getCanonicalName()))
{
Extenders.extendingClasses.get(parentClass.getCanonicalName()).add(this.getClass());
}
else
{
List<Class<?>> extenders = new ArrayList<>();
extenders.add(this.getClass());
Extenders.extendingClasses.put(parentClass.getCanonicalName(), extenders);
}
}
public static void main(String[] args)
{
Test3 tmp = new Test3();
for(Entry<String,List<Class<?>>> entry : Extenders.extendingClasses.entrySet())
{
System.out.println("Class "+entry.getKey()+" is extended by: ");
for(Class<?> clazz : entry.getValue())
{
System.out.print(clazz.getCanonicalName()+", ");
}
}
}
с суперклассом
public abstract class Test2 {
}
и синглтоном
public class Extenders {
public static Map<String,List<Class<?>>> extendingClasses = new TreeMap<>();
}
Этот метод Однако есть проблема, что вам нужно сначала создать экземпляр расширяющего класса. Так что это в основном не список всех экстендеров, а только тех, кто привык.
Вывод в этом случае будет:
Class Test2 is extended by:
Test3,
Я могу ошибаться: но, насколько я знаю, суперкласс не знает о его расширении.