私はあなたがほしいと思うと思うEvent.class.getDeclaredClasses()
。
event class name: 'Event$KeyboardEvent'.
event class name: 'Event$MouseEvent'.
event class name: 'Event$NetworkEvent'.
は、しかし、私はあなたが内部クラスに自分自身を制限するものではありませんよりオープン走査機構を探していると思います:
import java.util.ArrayList;
import java.util.List;
public class Event {
public static class MouseEvent extends Event {}
public static class KeyboardEvent extends Event {}
public static class NetworkEvent extends Event {}
public static class NotAnEvent {}
public static List<Class<?>> getDeclaredEvents() {
final Class<?>[] candidates = Event.class.getDeclaredClasses();
final List<Class<?>> declaredEvents = new ArrayList<Class<?>>();
for (final Class<?> candidate : candidates) {
if (Event.class.isAssignableFrom(candidate)) {
declaredEvents.add(candidate);
}
}
return declaredEvents;
}
public static void main(final String args[]) {
final List<Class<?>> events = Event.getDeclaredEvents();
for (final Class<?> event : events) {
System.out.println("event class name: '" + event.getName() + "'.");
}
}
}
はあなたに期待される出力が得られます。 this質問に基づいて、これを行うには簡単な方法がないように見えます。
Springフレームワークは、アノテーションスキャン(org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider
を参照)でこのような処理を行いますが、そのアプローチは単純なメソッド呼び出しではありません。
です? –
それは 'Event.class.getDeclaredClasses()'ではありませんか? –