Reflection

  • Автор темы tanatos
  • Дата начала
T

tanatos

#1
Вопрос у меня казалось бы простой, но тем не менее прямого ответа в джавадоке я не нашел.
1) Есть имя пакета. По нему нужно найти все классы, находящиеся в данном пакете в classpath.
2) Есть суперкласс и по нему нужно найти всех видимых в classpath подклассов.
Заранее благодарен за ответы.
 

Kmet

Java Team
25.05.2006
1 036
8
#2
в общем случае не возможно, так как JVM ничего не знает о еще не загруженных классах.
 
T

tanatos

#3
Но как-то же это у нее получается!
По сути мне нужен аналог выражения
import my.package.*;
 
C

Creo

#4
Не совсем понятна следующая чать вопроса:
находящиеся в данном пакете в classpath.
Если испольть следующий метод, то по ключу мона вытянуть директорию, где установлена JVM или откуда запускалось приложение и ещё много чего интересного...
Код:
System.getProperty(String key);
Посмотреть все ключи и их значения можно например так
Код:
public class Test {
public static void main(String[] args) {
System.out.println(System.getProperties());
}
}
Более точное описание вопроса и то что бы вы хотели получить помогло бы ответить на этот вопрос...
 

Kmet

Java Team
25.05.2006
1 036
8
#5
Но как-то же это у нее получается!
По сути мне нужен аналог выражения
import my.package.*;
Но как-то же это у нее получается!
у кого?
это выражение compile-time. да и то в этом случае компилятор не переберает все классы в пакете, используется чутка другой подход. а тебя, как я пологаю надо решение на run-time'ме. А на рантайме классы могут быть подгруженны не только с файловой системы, а например с БД или удаленного сервера как в случае с аплетами или WebStart или еще через какой хитрый класслоадер.
 
T

tanatos

#6
А на рантайме классы могут быть подгруженны не только с файловой системы, а например с БД или удаленного сервера как в случае с аплетами или WebStart или еще через какой хитрый класслоадер.
Это да. Но подобный механизм реализован во всех приличных ИДЕхах. Вот мне и интересно - там используется механизм файловой системы или поддержка рефлекшена. Почему например можно оплучить все ресурсы пэкэджа с одинаковым именем, но нельзя получить все классы? Как по мне было бы логично иметь метод типа ClassLoader.loadClasses(Package)
У JVM
Более точное описание вопроса и то что бы вы хотели получить помогло бы ответить на этот вопрос...
Нужны не переменные окружения а классы в определенном пакете и/или все видимые подклассы данного класса.

Вобщем-то я уже сделал то что хотел обходным путем (нужна была поддержка плагин лоадинга так чтобы подгрузчик не знал о том какие плагины он загружает), но все равно спасибо за ответы.
 

Kmet

Java Team
25.05.2006
1 036
8
#7
Это да. Но подобный механизм реализован во всех приличных ИДЕхах. Вот мне и интересно - там используется механизм файловой системы или поддержка рефлекшена.
посмотри сорцы эклипса.
Почему например можно оплучить все ресурсы пэкэджа с одинаковым именем, но нельзя получить все классы? Как по мне было бы логично иметь метод типа ClassLoader.loadClasses(Package)
Если бы хорошо знал как рабоают класслоадеры в ява, понял бы почему. но тема эта весьма обширная.
Вобщем-то я уже сделал то что хотел обходным путем (нужна была поддержка плагин лоадинга так чтобы подгрузчик не знал о том какие плагины он загружает), но все равно спасибо за ответы.
в спецификии jar описан возможный стандартный подход.