AK>А как сделать тоже самое зная абсолютный путь к class-файлу AK>например D:\\MyClass.class?
надо свой ClassLoader написать, который будет понимать такие запросы и грузить class из пути
Здравствуйте, raydac, Вы писали:
AK>>А как сделать тоже самое зная абсолютный путь к class-файлу AK>>например D:\\MyClass.class? R>надо свой ClassLoader написать, который будет понимать такие запросы и грузить class из пути
если свой писать как я уже писал юзаеш defineClass
а можно воспользватся URLClassLoader. помнится мне что им можно обойтись(могу ощибатся.).
Здравствуйте, Passer, Вы писали: P>в ClassLoader.defineClass можно передавать байтовый массив с содержимым .class файла.
А как-нибудь проще можно?
В чем вообще разница между тем же самым классом String из стандартной библиотеки
и моим классом MyClass для механизма reflection?
Почему для String можно легко обойтись вызовом getClass, а для MyClass нужно пользоваться ClassLoader
Здравствуйте, Alex Korovyansky, Вы писали:
AK>А как-нибудь проще можно? AK>В чем вообще разница между тем же самым классом String из стандартной библиотеки AK>и моим классом MyClass для механизма reflection? AK>Почему для String можно легко обойтись вызовом getClass, а для MyClass нужно пользоваться ClassLoader
разница в том что стандартные крассы находятся в местах где стандартный класслоадер может их легко найти и загрузить.
а твой класс может быть где угодно.
Здравствуйте, Passer, Вы писали:
P>разница в том что стандартные крассы находятся в местах где стандартный класслоадер может их легко найти и загрузить. P>а твой класс может быть где угодно.
Я же знаю где находится мой класс, как сделать чтобы стандартный ClassLoader тоже это знал
и мог легко всё сделать и для MyClass?
Здравствуйте, Alex Korovyansky, Вы писали:
AK>Я же знаю где находится мой класс, как сделать чтобы стандартный ClassLoader тоже это знал AK>и мог легко всё сделать и для MyClass?
AK>Неужели нельзя...
Здравствуйте, Alex Korovyansky, Вы писали:
AK>Неужели нельзя...
сомневаюсь. класс это не просто файл. у него есть пакет, он ссылается на другие класы. а если ты загружаеш класс в котором если ссылка на другой класс. откуда класслоадер найдет этот класс??
Здравствуйте, Alex Korovyansky, Вы писали:
AK>Добрый день! AK>Пользуясь reflection можно получить объект типа Class по имени класса AK>Например: Class myClass = Class.forName("java.lang.String");
AK>А как сделать тоже самое зная абсолютный путь к class-файлу AK>например D:\\MyClass.class?
Здравствуйте, Passer, Вы писали:
P>сомневаюсь. класс это не просто файл. у него есть пакет, он ссылается на другие класы. а если ты загружаеш класс в котором если ссылка на другой класс. откуда класслоадер найдет этот класс??
Согласен, но я же не собираюсь создавать объекты класса. Мне всего лишь нужно прочитать в каком пакете находится класс, какие методы и поля он содержит, чьим наследников явлеяется и какие интерфейсы реализует. Или такой статический разбор .class файла недопустим?
Здравствуйте, Alex Korovyansky, Вы писали:
AK>Я же знаю где находится мой класс, как сделать чтобы стандартный ClassLoader тоже это знал AK>и мог легко всё сделать и для MyClass?
Здравствуйте, Blazkowicz, Вы писали:
B>Учим новый термин: classpath
наслышен про classpath
пробывал с его помощью воспользоваться Class.ForName...
следующим образом:
String currentCP = System.getProperty("java.class.path").toString();
System.setProperty("java.class.path", (currentCP + ";" +"D:\\"));
Class c = Class.forName("MyClass");
//и так пробывал Class c = Class.forName("D:\\MyClass.class");
//и так пробывал Class c = Class.forName("D:\\MyClass");
может я что-нибудь не так делаю, сама идея мне нравится
So many men, so many minds...
Re[7]: Отражение из class-файла
От:
Аноним
Дата:
25.11.08 07:59
Оценка:
Здравствуйте, Alex Korovyansky, Вы писали:
AK>Здравствуйте, Blazkowicz, Вы писали:
B>>Учим новый термин: classpath AK>наслышен про classpath AK>пробывал с его помощью воспользоваться Class.ForName... AK>следующим образом:
AK>
AK> String currentCP = System.getProperty("java.class.path").toString();
AK> System.setProperty("java.class.path", (currentCP + ";" +"D:\\"));
AK> Class c = Class.forName("MyClass");
AK> //и так пробывал Class c = Class.forName("D:\\MyClass.class");
AK> //и так пробывал Class c = Class.forName("D:\\MyClass");
AK>
AK>может я что-нибудь не так делаю, сама идея мне нравится
глядя на этот код я могу сказать, что судя по всему вы не понимаете архитектуры java, и наверняка вы пытаетесь решить какую-то другую задачу методом операций на гландах автогеном через задний проход.
давайте всё же вернёмся к истокам и попытаемся сформулировать исходную задачу.
Здравствуйте, http://dolzhenko.blogspot.com/, Вы писали:
HDB>глядя на этот код я могу сказать, что судя по всему вы не понимаете архитектуры java, и наверняка вы пытаетесь решить какую-то другую задачу методом операций на гландах автогеном через задний проход. HDB>давайте всё же вернёмся к истокам и попытаемся сформулировать исходную задачу.
Давайте.
Необходимо для пакета посчитать меру абстрактности и меру устойчивости
подробнее о них можно прочитать например здесь
на входе у нас есть сам пакет состоящий из собранных .class файлов.
что скажете?
So many men, so many minds...
Re[9]: Отражение из class-файла
От:
Аноним
Дата:
25.11.08 08:30
Оценка:
Здравствуйте, Alex Korovyansky, Вы писали:
AK>подробнее о них можно прочитать например здесь
что-то у меня по данной ссылке по центру экрана висит баннер "бесплатное порно"... как-то читать неудобно
Здравствуйте, Alex Korovyansky, Вы писали:
AK>Давайте. AK>Необходимо для пакета посчитать меру абстрактности и меру устойчивости AK>подробнее о них можно прочитать например здесь
AK>на входе у нас есть сам пакет состоящий из собранных .class файлов. AK>что скажете?
Я скажу, что неразбериха пошла в топике. Высокие договаривающиеся стороны на мой взгляд не понимают друг друга. То, как ситуация видится со стороны:
Вопрос заключается в том, как получить объект класса Class для имеющегося файла, содержащего откомпилированный класс. При этом сам файл может находиться в произвольном месте файловой системы.
Ответ, который дают, заключается в том, что для того, чтобы стандартный механизм загрузки классов работал, необходимо не только иметь файл *.class, но и иметь его размещенным в файловой системе таким образом, чтобы структура родительских директорий этого файла начиная с корня, указанного в classpath, совпадала с именем пакета файла.
Варианты решений:
размещать файл *.class соблюдая указанные выше условия и использовать стандартный механизм загрузки классов;
самостоятельно производить начальный парсинг байткода класса с целью выяснения его полного имени (т.е. имя пакета + имя класса), использовать потом эту информацию и механизм кастомной загрузки классов, упоминавшийся выше по топику;
Если нет адских ограничений, вынуждающих использовать второй вариант, выбираем первый.
Здравствуйте, Alex Korovyansky, Вы писали:
AK>Необходимо для пакета посчитать меру абстрактности и меру устойчивости AK>подробнее о них можно прочитать например здесь
AK>на входе у нас есть сам пакет состоящий из собранных .class файлов. AK>что скажете?