[英]Build a collection of a class' inner classes
在伪代码我有:
abstract class Event
{
...
public static class MouseEvent extends Event
{
...
}
public static class KeyboardEvent extends Event
{
...
}
public static class NetworkEvent extends Event
{
...
}
}
是否有一种简洁的方法来获取所有内部类子类的名称/详细信息的集合? 最好作为基础Event
类的方法......
我相信你想要Event.class.getDeclaredClasses()
。
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() + "'.");
}
}
}
会给你预期的输出:
event class name: 'Event$KeyboardEvent'.
event class name: 'Event$MouseEvent'.
event class name: 'Event$NetworkEvent'.
但是,我认为您正在寻找一种更开放的扫描机制,并不局限于内部类。 基于这个问题,看起来没有直接的方法来做到这一点。
Spring框架通过其注释扫描执行类似的操作(请参阅org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider
),但它们的方法不是直接的方法调用。
public static void main(String[] args) {
for (Class c : OuterClass.class.getClasses())
{
System.out.println(c.getName());
}
}
然后你就可以上课了
public class OuterClass {
public class InnerClass {
}
public class InnerClassA {
}
public class InnerClassC {
}
}
由此产生的印刷声明是
OuterClass$InnerClass
OuterClass$InnerClassA
OuterClass$InnerClassC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.