有没有一种方法可以通过Java中的反射来获取内部类的列表?
有没有一种方法可以通过Java中的反射来了解类的内部类?是的,用于此。您只需要通过检查其修饰符来确定它是内部类还是嵌套(静态)类。假设有没有一种方法可以通过Java中的反射来获取内部类的列表?,java,reflection,Java,Reflection,有没有一种方法可以通过Java中的反射来了解类的内部类?是的,用于此。您只需要通过检查其修饰符来确定它是内部类还是嵌套(静态)类。假设Parent是父类,下面是一个启动示例: for (Class<?> cls : Parent.class.getDeclaredClasses()) { if (!Modifier.isStatic(cls.getModifiers())) { // This is an inner class. Do your thing
Parent
是父类,下面是一个启动示例:
for (Class<?> cls : Parent.class.getDeclaredClasses()) {
if (!Modifier.isStatic(cls.getModifiers())) {
// This is an inner class. Do your thing here.
} else {
// This is a nested class. Not sure if you're interested in this.
}
}
for(类cls:Parent.Class.getDeclaredClasses()){
如果(!Modifier.isStatic(cls.getModifiers())){
//这是一个内部类。在这里做你的事情。
}否则{
//这是一个嵌套类。不确定您是否对此感兴趣。
}
}
注意:这不包括匿名类,但在这个主题上,我认为您并没有明确要求匿名类。不,不幸的是,出于同样的原因,您不能 内部类实际上只是运行时的普通类。编译器做了一些调整来绕过通常的访问规则,例如,内部类似乎能够访问封闭类的私有字段和方法-它可以这样做,因为编译器创建了一个由内部类使用的非私有访问器函数。有关详细信息,请参阅 内部类是正则类,并且这些类不能可靠地枚举,所以一般的答案是不可能的 但是,它可以在特定情况下解决。如果您知道正在使用的JAR,那么您可以遍历JAR中的所有文件,查找模式为
yourpackage.YourClass$.class
的文件,其中
是一个或多个字符
编辑:
有各种类型的内部类:
如果您只关心第一个案例,那么BalusC使用
getDeclaredClasses
的回答是正确的。如果需要所有内部类,那么不幸的是,getDeclaredClasses
将无法工作。看见在这种情况下,您可以尝试链接中建议的类枚举方法之一(例如扫描JAR文件)。是的,有一个技巧可以做到这一点。看到一篇关于我的旧帖子。了解您的类(比如com.domain.api.ClassA),提取包名,将包转换为路径(将“.”替换为“/”,然后获得com/domain/api)扫描该文件夹中所有扩展名为.class的文件,并仅保留以您的类名(ClassA$xxxxx)开头的文件,这些是ClassA的内部类我想你把它们和“匿名类”混淆了。@BalusC从技术上讲,匿名类是内部类。:)