从字符串java给出的名称调用函数

Joa*_*oao 3 java reflection events

我希望能够根据字符串提供的名称来调用函数.就像是

public void callByName(String funcName){
   this.(funcName)();
}
Run Code Online (Sandbox Code Playgroud)

我已经搜索了一些lambda函数,但它们不受支持.我正在考虑去反思,但我对编程有点新意,所以我对这个主题并不熟悉.

当我开始GUI(Swing,swt)编程和事件时,整个问题都出现在我的java OOP类中.我发现使用object.addActionCommand()非常难看,因为我后来需要制作一个Switch并捕获我想要的确切命令.

我宁愿做类似的事情object.attachFunction(btn1_click),以便btn1_click在引发事件点击时调用该函数.

Don*_*ows 6

Java有方法,而不是函数.不同之处在于方法有类; 你需要知道要调用方法的类.如果它是一个实例方法,你需要一个实例来调用它,但OTOH它确实意味着你可以轻松地查看方法:

public void callByName(Object obj, String funcName) throws Exception {
    // Ignoring any possible result
    obj.getClass().getDeclaredMethod(funcName).invoke(obj);
}
Run Code Online (Sandbox Code Playgroud)

请注意,除此之外还有很多潜在的异常,如果你想传递参数,事情会变得更复杂.

如果你在谈论类方法,你所做的就是略有不同:

public void callClassByName(Class cls, String funcName) throws Exception {
    // Ignoring any possible result
    cls.getDeclaredMethod(funcName).invoke(null);
}
Run Code Online (Sandbox Code Playgroud)

您可能还想探索使用java.lang.reflect.Proxy.