我知道如何通过反射调用方法,它会创建一个新实例。但我无法做到这一点。因为我的类使用了Runnable接口,所以我必须在新线程中启动run方法。所以这不是理想的。 我现在的代码是:
public class Validation () impelements Runnable {
Validation (String[] methodName) {
if(methodName[2].equals("deposit") ){
this.deposit(account);
}
else if (methodName[2].equals("withdraw") ){
this.withdraw(account);
}
// lots of if-else
}
//..... other methods , deposit() , withdraw() , run();
}
我需要这样的东西(没有创建一个新的类实例,但它应该是反射):
更新:
if-else应该替换为这样的东西:
try {
this.invoke(methodName[2] , account);
} catch (Exceotion ex){
// something
}
我不能使用静态存款或取款方式,他们使用的是非静态变量。
在 php 中,我们有类似这样的东西:
$methodName = $array[2] ;
$this.methodName();
我的问题是:
如何通过反射调用非静态方法而不在同一个类中创建新实例?
答案 0 :(得分:0)
这是不可能的。
考虑一下,非静态方法与类的对象相关联,而不是与类本身相关联。
因此,要调用它们,您需要类的实例。
但是,如果你想用反射来调用非静态方法,但没有实例化,那就不可能了。
答案 1 :(得分:-1)
为清晰起见,省略了异常处理
class ObjectThatImplementsFoo {
public void foo() {
}
}
public void invokeFooOnObject(ObjectThatImplementsFoo foo) {
Method m = foo.getClass().getMethod("foo");
m.invoke(foo, null);
}
所以你的" if-else"应该用更像这样的东西代替:
try {
Method m = this.getClass().getMethod(methodName[2], account.getClass());
m.invoke(this, account);
} catch (Exception ex){
// something
}