Как вызвать метод объекта, если известно его имя в виде строки?
Спасибо.
Java. Вызов метода
-
- Уже с Приветом
- Posts: 672
- Joined: 11 Apr 2001 09:01
- Location: Russia, NN
-
- Уже с Приветом
- Posts: 1224
- Joined: 24 Feb 2003 07:40
-
- Уже с Приветом
- Posts: 4207
- Joined: 10 Jan 2004 01:22
- Location: n-sk -> MD -> VA
-
- Уже с Приветом
- Posts: 672
- Joined: 11 Apr 2001 09:01
- Location: Russia, NN
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);
}
}
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);
}
}
-
- Уже с Приветом
- Posts: 1102
- Joined: 16 Sep 2003 04:41
- Location: Out Of Blue
And for lazy bums: http://jakarta.apache.org/commons/beanu ... Utils.html
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
chip700 wrote: argtypes[0]=Class.forName("java.lang.Comparable");
Pochemu narod tak lyubit Class.forName()?
Pochemu ne napisat' prosto
argtypes[0]=java.lang.Comparable.class; ?
I esche raz povtoryus': vyzyvat' methody cherez reflection - nehorosho
Esli tol'ko vu ne izobretaete ocherednoy Application Server or RMI, chto tozhe ne est' horosho, no kak sposob samoudovletvoreniya sgoditsya...
-
- Уже с Приветом
- Posts: 1564
- Joined: 27 Nov 2001 10:01
- Location: Live free or die
По поводу ненужности использования Class.forName() в данном случае соглаен полностью,
а что касается рефлекшена так в 1.4.1 там уже все кешируется, т.е., оверхед не сильный, новообще то деествительно там где без него можно обойтись лучше обходится.
а что касается рефлекшена так в 1.4.1 там уже все кешируется, т.е., оверхед не сильный, новообще то деествительно там где без него можно обойтись лучше обходится.
Интересный вы человек! Все у вас в порядке. Удивительно, с таким счастьем - и на свободе. (C) О.Бендер
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
OBender wrote:...
а что касается рефлекшена так в 1.4.1 там уже все кешируется, т.е., оверхед не сильный, новообще то деествительно там где без него можно обойтись лучше обходится.
Я даже не рассматриваю скорость.
Много раз наблюдал (в том числе на своем примере) как люди "шизеют" увидев что позволяет делать reflection, и начинают лепить ее направо и налево, порождая монстров.
Вот и хочу уберечь молодежь от дурных привычек...
-
- Уже с Приветом
- Posts: 203
- Joined: 11 Nov 2003 19:53
- Location: Bridgepointe