简体   繁体   English

Java - 使用反射获取对静态类的引用

[英]Java - Get reference to a static class using reflection

In Java, is it possible to access an instance of a static class (nested) using reflection? 在Java中,是否可以使用反射访问静态类(嵌套)的实例?

Supposing I have the following 2 classes defined in the package Package1.SubPackage.SubSubPackage: 假设我在Package1.SubPackage.SubSubPackage包中定义了以下2个类

public class MyMainClass {  
   public static class SalesObjectGrouper1 {  
      public static final GrouperContext CONTEXT = new GrouperContext("MyDate");  
   }  

   private static class SalesObjectGrouper2 {  
      public static final GrouperContext CONTEXT = new GrouperContext("MyDate");  
   }  
}  

If I run the following code: 如果我运行以下代码:

try {
     xyz = Class.forName( "Package1.SubPackage.SubSubPackage.MyMainClass.SalesObjectGrouper1" );
} catch( ClassNotFoundException ex ) {
     // always hit the error
}

it will error indicating class cannot be found. 它会出现错误,表明找不到类。 Can this be done? 可以这样做吗?

Have you tried referring to the nested class as 您是否尝试过将嵌套类称为

MyMainClass$SalesObjectGrouper1

Nested classes are internally named ContainingClassName$NestedClassName 嵌套类在内部命名为ContainingClassName $ NestedClassName

To avoid hacks in the mapping of Java language classes on to the Java runtime classes, you could use Class.getDeclaredClasses . 为了避免将Java语言类映射到Java运行时类,您可以使用Class.getDeclaredClasses Using reflection is often a mistake. 使用反射通常是一个错误。 Dealing with nested classes does not seem to be a good sign. 处理嵌套类似乎不是一个好兆头。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM