Как получить весь импорт, определенный в классе с использованием java-отражения?

Привет, я новичок в 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
}

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

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

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

Ответ 1

Я просто хочу узнать список всех import, заданный в классе, используя отражения

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

Ответ 2

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

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

Ответ 3

Я думаю, что вы можете использовать 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);
    }