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在引发事件点击时调用该函数.
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.