从字符串创建Java方法?
是否有可能在Java中使用字符串而不是标识符来声明方法?从字符串创建Java方法?
例如,我可以做类似如下:
class Car{
new Method("getFoo", {
return 1+1;
});
}
//Use it
Car car = new Car();
car.getFoo();
编辑:我加入一个目的为什么我需要这个。为了利用泽西岛和其UriBuilder,这需要一个方法名时,没有硬编码方法名称: https://jsr311.dev.java.net/nonav/releases/1.1/javax/ws/rs/core/UriBuilder.html
见路径()方法的签名:
public abstract UriBuilder path(java.lang.Class resource,
java.lang.String method)
throws java.lang.IllegalArgumentException
于是我可以只使用字符串常量和不用担心方法名称会与传递给path()方法的字符串不同。
我希望我的问题很清楚,如果不是的话 - 让我知道,我可以澄清它。
根据目的,为什么不只是有一个方法,并根据调用者和参数让它行为/行为不同?
这就是我目前正在做的。我有相同的方法,在5个不同的类中说“getFoo”,然后我只是将字符串“getFoo”传递给UriBuilder。问题是,如果将来有任何方法名称发生变化,要说“getBar” - 我的字符串“getFoo”仍然会传递给UriBuilder,它会尝试对它进行反射 - 并且空手而归。 – drozzy 2010-06-11 14:41:04
@drozzy你的声音应该在界面中声明getFoo并让你的5个类实现它? – Chris 2010-06-11 14:51:08
谢谢,但我实际上想出了一个解决方案 - 我只会在类而不是方法上使用Path注解。这样我就不必引用方法名称了。 – drozzy 2010-06-11 14:53:20
将代码中的方法名字作为字符串确实不是很好,但如果觉得从侧面和从jax-rs端反射的用法应该进行补偿,以免发生这种情况。
让我澄清。我想你正在使用UriBuilder
,因为你想公开一个服务,或类似的东西。如果您在课堂上反思并列出方法,则在UriBuilder
中传递其名称,这也反映了该类,该方法从未在源中明确提及。
虽然我并不熟悉jax-rs,并且不知道更多关于你准确实现的内容(你的编辑确实提供了更多的信息,但并没有解释你想到的最终目标),但我不知道这是否合理。但它可能是一条需要遵循的轨道。
你最终试图用你最近的两个问题的解决方案来完成什么? – jjnguy 2010-06-11 14:29:24
我相信你可以使用反射来实现这一点 - 但你为什么要?你想动态生成类吗? – 2010-06-11 14:31:29