В Java есть методы, а не функции. Разница в том, что у методов есть классы; вам нужно знать класс для вызова метода. Если это метод экземпляра, вам нужен экземпляр для его вызова, но OTOH означает, что вы можете легко найти метод:
public void callByName(Object obj, String funcName) throws Exception {
// Ignoring any possible result
obj.getClass().getDeclaredMethod(funcName).invoke(obj);
}
Обратите внимание, что существует лот потенциальных исключений из этого, и все становится более сложным, если вы хотите передать аргументы.
Если вы говорите о методе класса, то, что вы делаете, немного отличается:
public void callClassByName(Class cls, String funcName) throws Exception {
// Ignoring any possible result
cls.getDeclaredMethod(funcName).invoke(null);
}
Возможно, вы захотите исследовать, используя java.lang.reflect.Proxy
.