Как получить весь импорт, определенный в классе, используя отражение Java? - PullRequest
10 голосов
/ 18 апреля 2011

Привет, я новичок в домене Java-отражения. Так что кто-нибудь может мне помочь в этом проблемном сценарии.

У меня есть класс с именем "SomClass.java" , и он импортирует пакет с именем "SomPackage.RefClass" И некоторые другие библиотеки Java, такие как java.lang и т. д.

Теперь я хочу узнать об импорте, определенном в классе, с помощью отражения.

import SomPackage.RefClass;
import java.lang.reflect.Field;
import java.io.IOException; 
 public class SomeClass{
  RefClass refClass_Obj;
  String nationality;
///some other members
}

Я просто хочу знать список всего импорта, определенного в классе, используя отражение.

Я видел Вопрос , опубликованный слышать, похожий на мой Q, но он не очень хорошо проработан, поэтому мне нужно хорошее направление помощи.

спасибо заранее.

Ответы [ 3 ]

12 голосов
/ 18 апреля 2011

Я просто хочу знать список всех импорт определен в классе с помощью отражение

Вы не можете, потому что компилятор не помещает их в объектный файл. Это выбрасывает их. Импорт - это всего лишь сокращение от компилятора.

12 голосов
/ 18 апреля 2011

Импорт - это функция времени компиляции - нет никакой разницы в скомпилированном коде между версией, которая использует полное имя типа, где он упоминается, версией, которая импортирует все, используя *, и версией, которая импортирует классы по полнойname.

Если вы хотите найти все типы используемые в скомпилированном коде, это немного другой вопрос.Возможно, вы захотите посмотреть на BCEL как способ анализа байт-кода.

4 голосов
/ 10 июля 2012

Я думаю, что вы можете использовать Qdox , чтобы получить весь импорт в классе, который на самом деле не отражается, но может служить вашей цели:

    String fileFullPath = "Your\\java\\ file \\full\\path";
    JavaDocBuilder builder = new JavaDocBuilder();
    builder.addSource(new FileReader( fileFullPath  ));

    JavaSource src = builder.getSources()[0];
    String[] imports = src.getImports();

    for ( String imp : imports )
    {
        System.out.println(imp);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...