В Java действительно ли возможно получить доступ к экземпляру статического класса (вложенного) с помощью отражения?
Предположим, у меня есть следующие 2 класса, определенные в пакете Package1. SubPackage. SubSubPackage:
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");
}
}
Если я выполняю следующий код:
try {
xyz = Class.forName( "Package1.SubPackage.SubSubPackage.MyMainClass.SalesObjectGrouper1" );
} catch( ClassNotFoundException ex ) {
// always hit the error
}
это будет ошибка, указывающая, что класс не может быть найден. Это может быть сделано?
Вы пробовали ссылаться на вложенный класс как
MyMainClass$SalesObjectGrouper1
Вложенные классы имеют внутреннее имя ContainClassName $ NestedClassName
Чтобы избежать хаков в отображении классов языка Java на классы среды выполнения Java, можно использовать Class.getDeclaredClasses
. Использование отражения часто является ошибкой. Работа с вложенными классами не является хорошим знаком.