Ответ 1
Я просто хочу узнать список всех import, заданный в классе, используя отражения
Вы не можете, потому что компилятор не помещает их в объектный файл. Это отбрасывает их. Импорт - это всего лишь сокращение от компилятора.
Привет, я новичок в 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, но он недостаточно хорошо разработан, поэтому нужно хорошее направление помощи.
Заранее спасибо.
Я просто хочу узнать список всех import, заданный в классе, используя отражения
Вы не можете, потому что компилятор не помещает их в объектный файл. Это отбрасывает их. Импорт - это всего лишь сокращение от компилятора.
Импорт - это функция времени компиляции - нет никакой разницы между скомпилированным кодом между версией, которая использует полное имя типа везде, где он упоминается, версию, которая импортирует все, используя *, и версию, которая импортирует классы по полной имя.
Если вы хотите найти все типы, используемые в скомпилированном коде, это немного другое дело. Вы можете посмотреть BCEL как способ анализа байт-кода.
Я думаю, что вы можете использовать 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);
}