是否可以将字符串作为方法执行?
假设我有一个服务器和一个客户端。客户端正在发送一个"sayHello()"
字符串。如果他有方法,客户端可以在客户端执行这个字符串作为private void sayHello()
方法吗?
我知道我可以通过将字符串与某些值进行比较并基于此调用函数来调用该方法。但我正在研究类似上面描述的东西。
是否可以将字符串作为方法执行?
假设我有一个服务器和一个客户端。客户端正在发送一个"sayHello()"
字符串。如果他有方法,客户端可以在客户端执行这个字符串作为private void sayHello()
方法吗?
我知道我可以通过将字符串与某些值进行比较并基于此调用函数来调用该方法。但我正在研究类似上面描述的东西。
这听起来像是Java 反射的完美匹配。但是请注意,有许多框架可用于使用 Java 执行远程方法调用,您可能会重新发明轮子。
Java 反射可以做到这一点。
另请查看对所述要求更具体的远程方法调用 (RMI) 。
反射不是很难编码:
public void invokeByName(String methName) {
try { getClass().getDeclaredMethod(methName).invoke(this); }
catch (RuntimeException e) { throw e; }
catch (Exception e) { throw new RuntimeException(e); }
}
一个简洁的例子:
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!");
}
}
是的,请参见java.beans.Statement
和java.beans.Expression
。