我希望能够根据字符串提供的名称来调用函数.就像是
public void callByName(String funcName){
this.(funcName)();
}
我已经搜索了一些lambda函数,但它们不受支持.我正在考虑去反思,但我对编程有点新意,所以我对这个主题并不熟悉.
当我开始GUI(Swing,swt)编程和事件时,整个问题都出现在我的java OOP类中.我发现使用object.addActionCommand()非常难看,因为我后来需要创建一个Switch并捕获我想要的确切命令.
我宁愿做一些像object.attachFunction(btn1_click)这样的东西,以便在引发事件点击时调用btn1_click函数.
解决方法:
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,reflection,events
来源: https://codeday.me/bug/20190722/1498008.html