Использование Java Reflections для извлечения классов-членов - PullRequest
0 голосов
/ 21 апреля 2010

Я использую метод .getDeclaredClasses () для извлечения всех классов, которые были определены в объекте. Однако я не могу получить анонимные классы, определенные в этом классе. Вот пример кода, который я тестирую:

public class TempCodes
{
  public static void main(String[] args)
  {
    Ball b = new Ball()
    {
      public void hit()
      {
        System.out.println("You hit it!");
      }
    };
    b.hit();
  }

  interface Ball {
    void hit();
  }
}

и вот что делает мой код:

  memClass = className.getDeclaredClasses();
  if (memClass .length > 0) 
  {
        for (int index = 0 ; index < memClass .length ; index++)
        {
            System.out.println("\t\t\t" + memClass [index]);
        }
  }

Может кто-нибудь помочь мне понять, как получить анонимный класс?

С уважением, Негр

1 Ответ

1 голос
/ 21 апреля 2010

С небольшой помощью classpath:

final Class<?> cls = TempCodes.class;
String[] names = new File(cls.getResource("").toURI()).list(new FilenameFilter() {
    public boolean accept(File dir, String name) {
        return name.startsWith(cls.getSimpleName());
    }
});
for (String name : names) {
    System.out.println(name);
}

Результат:

TempCodes$1.class
TempCodes$Ball.class
TempCodes.class

Вы должны отфильтровать нужную информацию самостоятельно.

Отказ от ответственности: плохо работает с файлами JAR, но подсказка достаточно ясна: это невозможно с отражением. Я бы поставил под сомнение необходимость этого и переосмыслил бы дизайн или подход. Вот некоторые темы, представляющие интерес: Отражение Java: Как я могу получить анонимные внутренние классы? и Доступ к внутренним анонимным членам класса .

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