【发布时间】:2012-10-06 07:37:45
【问题描述】:
是否可以将String作为方法执行?
假设我有一个服务器和一个客户端。客户端发送一个"sayHello()" 字符串。
如果客户端有private void sayHello() 方法,客户端是否可以将这个字符串作为方法在客户端执行?
我知道我可以通过将字符串与某些值进行比较来调用该方法,并基于此调用函数。但我正在研究上述内容。
【问题讨论】:
标签: java reflection rmi rpc
是否可以将String作为方法执行?
假设我有一个服务器和一个客户端。客户端发送一个"sayHello()" 字符串。
如果客户端有private void sayHello() 方法,客户端是否可以将这个字符串作为方法在客户端执行?
我知道我可以通过将字符串与某些值进行比较来调用该方法,并基于此调用函数。但我正在研究上述内容。
【问题讨论】:
标签: java reflection rmi rpc
这听起来很适合Java reflection。但请注意,有许多框架可用于使用 Java 执行远程方法调用,您可能需要重新发明轮子。
【讨论】:
Java Reflection 可以做到这一点。
另请查看Remote Method Invocation (RMI),它更具体地满足所述要求。
【讨论】:
一个简洁的例子:
class Foo {
public static void main(String[] args) throws Exception {
String methodStr = "sayHello";
Foo foo = new Foo();
foo.getClass().getDeclaredMethod(methodStr).invoke(obj);
}
private void sayHello() {
System.out.println("hello stackoverflow!");
}
}
【讨论】:
反射并不难编码:
public void invokeByName(String methName) {
try { getClass().getDeclaredMethod(methName).invoke(this); }
catch (RuntimeException e) { throw e; }
catch (Exception e) { throw new RuntimeException(e); }
}
【讨论】:
是的,请参阅 java.beans.Statement 和 java.beans.Expression。
【讨论】: