2010-06-11 85 views
3

是否有可能在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()方法的字符串不同。

我希望我的问题很清楚,如果不是的话 - 让我知道,我可以澄清它。

+0

你最终试图用你最近的两个问题的解决方案来完成什么? – jjnguy 2010-06-11 14:29:24

+0

我相信你可以使用反射来实现这一点 - 但你为什么要?你想动态生成类吗? – 2010-06-11 14:31:29

回答

2

这是不可能的你描述的方式。

最接近的东西可能是asm库来创建java字节码。

1

根据目的,为什么不只是有一个方法,并根据调用者和参数让它行为/行为不同?

+0

这就是我目前正在做的。我有相同的方法,在5个不同的类中说“getFoo”,然后我只是将字符串“getFoo”传递给UriBuilder。问题是,如果将来有任何方法名称发生变化,要说“getBar” - 我的字符串“getFoo”仍然会传递给UriBuilder,它会尝试对它进行反射 - 并且空手而归。 – drozzy 2010-06-11 14:41:04

+0

@drozzy你的声音应该在界面中声明getFoo并让你的5个类实现它? – Chris 2010-06-11 14:51:08

+0

谢谢,但我实际上想出了一个解决方案 - 我只会在类而不是方法上使用Path注解。这样我就不必引用方法名称了。 – drozzy 2010-06-11 14:53:20

0

将代码中的方法名字作为字符串确实不是很好,但如果觉得从侧面和从jax-rs端反射的用法应该进行补偿,以免发生这种情况。

让我澄清。我想你正在使用UriBuilder,因为你想公开一个服务,或类似的东西。如果您在课堂上反思并列出方法,则在UriBuilder中传递其名称,这也反映了该类,该方法从未在源中明确提及。

虽然我并不熟悉jax-rs,并且不知道更多关于你准确实现的内容(你的编辑确实提供了更多的信息,但并没有解释你想到的最终目标),但我不知道这是否合理。但它可能是一条需要遵循的轨道。

0

如果您可以考虑在JVM上使用其他语言,Groovy可以这样做。