Другие языки программирования и технологии

Java, получение названий методов и вызов методов по имени

Только начал изучать java, и вот возникла такая задача:
1.Нужно получить массив из названий статических методов класса. (аналог get_class_methods в php)
2.Нужно вызвать метод по его имени (строке). (аналог call_user_func в php)
Возможно ли это в Java, и как?
Заранее спасибо! =)
А для чего это нужно? То, что ты описал называется Reflection, но обычно можно заменить более подходящими решениями
АС
Александр Соснин
22 045
Лучший ответ
Дмитрий Полулях Для вызова функции, название которой приходит в Post параметре =)
да! можно у меня массив классов находится в MySQL сервере я от туда забираю массив см. код ниже... .
private static void runIntercept(String intercept, String dbase,
Matcher matcher, Object mode, Object tblalter) {
try {
Class c = Class.forName("org.informburo.interceptor."
+ intercept);// Сюда ставится дописывается Price(название класса см. ниже)
// Constructor con = c.getConstructor(Matcher.class);
Object t = c.newInstance();
Method m = c.getMethod("run", String.class, Matcher.class,
Object.class, Object.class );
// Object o = m.invoke(t, dbase, matcher);
// System.out.println(o);
m.invoke(t, dbase, matcher, mode, tblalter);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
--------------------------------------------------------------------------------------------------------------------------------------
public class price {

private Object nf;

public price() {
}

public void run(String dbase, Matcher matcher, Object mode, Object tblalter) {
//utils.getMatcherGroup(matcher);
if ((nf = utils.unZip(run.conf.getConfigParam("vsftpd.dir.prices"),
matcher.group(0))) == null)
return;
if (!run.dm.initdbf(dbase, nf, "cp866"))
return;
//Object o= matcher.group(5);
if (((Object)matcher.group(5)) == null)
nf = "`0000`";
else
nf = "`"+matcher.group(5)+"`";
run.dm.insertRowPrice(dbase, new Object[][] { { "CDFIRM", 'N' },
{ "CDPREP", 'N' }, { "CDPLANT", 'N' }, { "PRICE", 'N' },
{ "PRICE_1", 'N' }, { "AMOUNT", 'N' }, { "VALIDDATE", 'D' } },
nf, mode.equals("append") ? null : "DELETE FROM " + nf
+ " WHERE cdfirm=" + matcher.group(3), tblalter);
}

}
Андрей Tornado
Андрей Tornado
11 877