Повышающее приведение типа
От: pla3moid  
Дата: 18.12.06 06:44
Оценка:
// Как мне получить доступ к методам класса, загружаемого с помощью ClassLoader.
// Делаю:

Object myCob = myLoader.loadClass("MyClass").newInstance();

// Не получаю доступ к методам MyClass.
// Делаю:

MyClass myCob = (MyClass)myLoader.loadClass("MyClass").newInstance();

// Получаю classCastException(точно не помню)
Re: Повышающее приведение типа
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 18.12.06 06:55
Оценка:
Здравствуйте, pla3moid, Вы писали:

P>// Как мне получить доступ к методам класса, загружаемого с помощью ClassLoader.

P>// Делаю:

P>Object myCob = myLoader.loadClass("MyClass").newInstance();


P>// Не получаю доступ к методам MyClass.

P>// Делаю:

P>MyClass myCob = (MyClass)myLoader.loadClass("MyClass").newInstance();


P>// Получаю classCastException(точно не помню)


не иметь MyClass в несколькх класслоадерах (myLoader, и в том, которым загружен вот этот вот твой код). Да и вообще как-то глупо имея MyClass в текущем класслоадере пытаться грузить его другим. в чем фишка?
Re[2]: Повышающее приведение типа
От: pla3moid  
Дата: 18.12.06 07:01
Оценка:
Здравствуйте, Lucker, Вы писали:

L>Здравствуйте, pla3moid, Вы писали:


P>>// Как мне получить доступ к методам класса, загружаемого с помощью ClassLoader.

P>>// Делаю:

P>>Object myCob = myLoader.loadClass("MyClass").newInstance();


P>>// Не получаю доступ к методам MyClass.

P>>// Делаю:

P>>MyClass myCob = (MyClass)myLoader.loadClass("MyClass").newInstance();


P>>// Получаю classCastException(точно не помню)


L>не иметь MyClass в несколькх класслоадерах (myLoader, и в том, которым загружен вот этот вот твой код). Да и вообще как-то глупо имея MyClass в текущем класслоадере пытаться грузить его другим. в чем фишка?


P>> Да нет, лоадер у меня один, это просто я так записал код на форум.myLoader(1шт) нужно получить экземпляр MyClass,

а не Object.
Re[3]: Повышающее приведение типа
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 18.12.06 07:09
Оценка:
Здравствуйте, pla3moid, Вы писали:

еще раз, кто такой myLoader?
Re[3]: Повышающее приведение типа
От: LDimas Россия  
Дата: 18.12.06 07:10
Оценка:
Здравствуйте, pla3moid, Вы писали:

P> Да нет, лоадер у меня один, это просто я так записал код на форум.myLoader(1шт) нужно получить экземпляр MyClass,

P>а не Object.

Ну ты уж потрудись записать то, чего собственно хочешь
Re[4]: Повышающее приведение типа
От: pla3moid  
Дата: 18.12.06 07:31
Оценка:
Начинаю писать:
Короче, как загрузить класс из .jar и получить доступ к его методам.(с помощью ClassLoader или без ней мен все равно).
Re[5]: Повышающее приведение типа
От: Michael_Y Украина  
Дата: 18.12.06 07:39
Оценка:
Здравствуйте, pla3moid, Вы писали:

P>Начинаю писать:

P>Короче, как загрузить класс из .jar и получить доступ к его методам.(с помощью ClassLoader или без ней мен все равно).

Вот так:
  Method[] methods = myLoader.loadClass("MyClass").getDeclaredMethods();
Re[5]: Повышающее приведение типа
От: LDimas Россия  
Дата: 18.12.06 07:48
Оценка:
Здравствуйте, pla3moid, Вы писали:

P>Начинаю писать:

P>Короче, как загрузить класс из .jar и получить доступ к его методам.(с помощью ClassLoader или без ней мен все равно).

Честно говоря, я не понимаю как это все относится к приведению типов.
Если ты хочешь загрузить класс, то нужно чтобы был создан связанный с этим классом экземпляр класса Class. Используемый по умолчанию загрузчик классов сделает это сам, когда ты создашь объект нужного класса или обратишься к его статическому полю или методу.
Re[5]: Повышающее приведение типа
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 18.12.06 08:26
Оценка:
Здравствуйте, pla3moid, Вы писали:

P>Начинаю писать:

P>Короче, как загрузить класс из .jar и получить доступ к его методам.(с помощью ClassLoader или без ней мен все равно).

ну так судя по коду

MyClass myCob = (MyClass)myLoader.loadClass("MyClass").newInstance();


для загрузки твоего MyClass не надо никаких лишних телодвижений. Другое дело было бы, если бы MyClass имплементил некоторый интерфейс, а вот в рантайме нужно было бы подгрузить конкретную реализацию. Типа

MyInterface myCob = (MyInterface)myLoader.loadClass("MyClass" /*implements MyInterface*/).newInstance();

Тогда нужно смотреть за правильной иерархией класслоадеров. myLoader должен быть потомком текущего класс лоадера, т.е. для некоего jara-а

final URLClassLoader myLoader = new URLClassLoader(new URL[]{urlToJar});
//и потом уже 
MyInterface myCob = (MyInterface)myLoader.loadClass("MyClass").newInstance();
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.