DZ>Вопрос заключается в том, как получить объект класса Class для имеющегося файла, содержащего откомпилированный класс. При этом сам файл может находиться в произвольном месте файловой системы.
AK>может я что-нибудь не так делаю, сама идея мне нравится
Данная пропертя всего лишь отражает classpath для загрузчика приложения. Модификация значения же на самом загрузчике никак не сказывается. Classpath устанавливается при запуске JVM
java -cp D:\ ...
Но надо не забывать так же о пакетах и особенностях классов пакета по-умолчанию. В общем нюансов так много, что с наскока задачу не решить.
да...
Хотелось получить ответ на несложный казалось бы вопрос.
denis.zhdanov абсолютно точно понял суть вопроса,
как получить объект класса Class для имеющегося файла, содержащего откомпилированный класс. При этом сам файл может находиться в произвольном месте файловой системы.
Причем естественно самым простым образом.
в итоге через изменение classpath у меня не получилось(фрагмент кода я приводил)
с помощью ClassLoader получилось.
Здравствуйте, Alex Korovyansky, Вы писали:
AK>Давайте. AK>Необходимо для пакета посчитать меру абстрактности и меру устойчивости AK>подробнее о них можно прочитать например здесь
AK>на входе у нас есть сам пакет состоящий из собранных .class файлов. AK>что скажете?
Ну если тебе это все нужно для статического анализа, без контекста выполнения, то скорее всего тебе нужно воспользоваться библиотекой манипушяции байткодом. Я сам особо с ними не возился но слышал что asm самая продвинутая. Там парсер работает как SAX XML парсер. Тоесть памяти много не жрет для построения модели класс файла. Конечно такого рода библиотеки нужны в основном для модификации классов в рантайме, но для твоей задачи тоже сгодятся. А рефлексия в java скорее всего тебе не подайдет. У нее другие задачи и она их делает хорошо.
Вам, пожалуй, вообще не нужно загружать классы. Зачем вам их статические члены (у которых есть инициализаторы, которые могут выполнить любой нехороший код)?
Пользуйтесь Javassist или BCEL.
RT>Вам, пожалуй, вообще не нужно загружать классы. Зачем вам их статические члены (у которых есть инициализаторы, которые могут выполнить любой нехороший код)?
С инициализаторами я погорячился, они не обязательно будут выполняться. Но всё равно рекоммендую посмотреть на Javassist или BCEL.