Java - получить ссылку на статический класс, используя отражение - PullRequest
8 голосов
/ 29 июля 2010

В 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
}

, будет ошибка, указывающая, что класс не найден.Можно ли это сделать?

Ответы [ 2 ]

18 голосов
/ 29 июля 2010

Вы пытались ссылаться на вложенный класс как

MyMainClass$SalesObjectGrouper1

Вложенные классы имеют внутреннее имя ConistingClassName $ NestedClassName

3 голосов
/ 29 июля 2010

Чтобы избежать взломов при отображении классов языка Java на классы времени выполнения Java, вы можете использовать Class.getDeclaredClasses. Использование отражения часто является ошибкой. Работа с вложенными классами не кажется хорошим знаком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...