Reflection

Тема в разделе "Java", создана пользователем tanatos, 19 май 2008.

  1. tanatos

    tanatos Гость

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

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    в общем случае не возможно, так как JVM ничего не знает о еще не загруженных классах.
     
  3. tanatos

    tanatos Гость

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

    Creo Гость

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

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    у кого?
    это выражение compile-time. да и то в этом случае компилятор не переберает все классы в пакете, используется чутка другой подход. а тебя, как я пологаю надо решение на run-time'ме. А на рантайме классы могут быть подгруженны не только с файловой системы, а например с БД или удаленного сервера как в случае с аплетами или WebStart или еще через какой хитрый класслоадер.
     
  6. tanatos

    tanatos Гость

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

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

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    посмотри сорцы эклипса.
    Если бы хорошо знал как рабоают класслоадеры в ява, понял бы почему. но тема эта весьма обширная.
    в спецификии jar описан возможный стандартный подход.
     
Загрузка...
Похожие Темы - Reflection
  1. Serduko
    Ответов:
    2
    Просмотров:
    1.001
  2. mailer
    Ответов:
    0
    Просмотров:
    2.094

Поделиться этой страницей