2010-06-11 129 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可以這樣做。