Java. Вызов метода

User avatar
wolfboy
Уже с Приветом
Posts: 1224
Joined: 24 Feb 2003 07:40

Java. Вызов метода

Post by wolfboy »

Как вызвать метод объекта, если известно его имя в виде строки?
Спасибо.
chip700
Уже с Приветом
Posts: 672
Joined: 11 Apr 2001 09:01
Location: Russia, NN

Post by chip700 »

<дубль>
chip700
Уже с Приветом
Posts: 672
Joined: 11 Apr 2001 09:01
Location: Russia, NN

Post by chip700 »

//если у метода нет параметров, то можно так

SomeClass c = new SomeClass();

c.getClass().getMethod("SomeMethod",null).invoke(с,null);
User avatar
wolfboy
Уже с Приветом
Posts: 1224
Joined: 24 Feb 2003 07:40

Post by wolfboy »

Ухудшу постановку.
SomeMethod имеет вид
SomeMethod((Comparable) value).
Как сейчас?
User avatar
fruit6
Уже с Приветом
Posts: 4207
Joined: 10 Jan 2004 01:22
Location: n-sk -> MD -> VA

Post by fruit6 »

wolfboy wrote:Ухудшу постановку.
SomeMethod имеет вид
SomeMethod((Comparable) value).
Как сейчас?


видимо остается парсить. а потом использовать java.lang.reflect package, как указал предыдущий оратор
chip700
Уже с Приветом
Posts: 672
Joined: 11 Apr 2001 09:01
Location: Russia, NN

Post by chip700 »

class ArgClass implements Comparable{

public int compareTo(Object o){
return 0;
}

}

class MethodClass {

public void SomeMethod(Comparable value){

System.out.println("MethodClass.SomeMethod(Comparable) working:"+value.toString());

}

}

public class Test{

public static void callSomeMethod(Object c,Comparable arg)
throws NoSuchMethodException,
SecurityException,
IllegalAccessException,
java.lang.reflect.InvocationTargetException,
ClassNotFoundException

{

Class[] argtypes = new Class[1];
argtypes[0]=Class.forName("java.lang.Comparable");

Object[] arglist = new Object[1];
arglist[0] = arg;

c.getClass().getMethod("SomeMethod",argtypes).invoke(c,arglist);

}

static public void main(String[] args) throws Exception{

MethodClass c = new MethodClass();
ArgClass a = new ArgClass();

callSomeMethod(c,a);

}

}
User avatar
Blake
Уже с Приветом
Posts: 1102
Joined: 16 Sep 2003 04:41
Location: Out Of Blue

Post by Blake »

Palych
Уже с Приветом
Posts: 13682
Joined: 16 Jan 2001 10:01

Post by Palych »

chip700 wrote: argtypes[0]=Class.forName("java.lang.Comparable");


Pochemu narod tak lyubit Class.forName()? :pain1:
Pochemu ne napisat' prosto
argtypes[0]=java.lang.Comparable.class; ?

I esche raz povtoryus': vyzyvat' methody cherez reflection - nehorosho
:umnik1:
Esli tol'ko vu ne izobretaete ocherednoy Application Server or RMI, chto tozhe ne est' horosho, no kak sposob samoudovletvoreniya sgoditsya...
User avatar
OBender
Уже с Приветом
Posts: 1564
Joined: 27 Nov 2001 10:01
Location: Live free or die

Post by OBender »

По поводу ненужности использования Class.forName() в данном случае соглаен полностью,
а что касается рефлекшена так в 1.4.1 там уже все кешируется, т.е., оверхед не сильный, новообще то деествительно там где без него можно обойтись лучше обходится.
Интересный вы человек! Все у вас в порядке. Удивительно, с таким счастьем - и на свободе. (C) О.Бендер
Palych
Уже с Приветом
Posts: 13682
Joined: 16 Jan 2001 10:01

Post by Palych »

OBender wrote:...
а что касается рефлекшена так в 1.4.1 там уже все кешируется, т.е., оверхед не сильный, новообще то деествительно там где без него можно обойтись лучше обходится.

Я даже не рассматриваю скорость.
Много раз наблюдал (в том числе на своем примере) как люди "шизеют" увидев что позволяет делать reflection, и начинают лепить ее направо и налево, порождая монстров.
Вот и хочу уберечь молодежь от дурных привычек... ;)
User avatar
smesh
Уже с Приветом
Posts: 203
Joined: 11 Nov 2003 19:53
Location: Bridgepointe

Post by smesh »

wolfboy wrote:Ухудшу постановку.
SomeMethod имеет вид
SomeMethod((Comparable) value).
Как сейчас?


Class[] paramTypes={Comparable.class};
Object[] params={value};

c.getClass().getMethod("SomeMethod",paramTypes).invoke(с,params);

--
Sorry, если повторил уже пройденное.

Return to “Вопросы и новости IT”