使用GWT我有一個Java類:如何動態訪問GWT中Java對象的屬性?
public class Pojo {
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
上述類的客戶端和服務器端代碼之間共享。
從客戶端代碼我想動態訪問屬性。也就是說,我想編寫一個方法具有以下簽名:
public String getProperty(Object o, String propertyName)
使得下面的代碼將工作:
Pojo pojo = new Pojo();
pojo.setName("Joe");
getProperty(pojo, "name"); // this should return "Joe"
Java反射是明顯的。並且我嘗試了以下JSNI方法:
public static native String getProperty(Object o, String name) /*-{
return o[name];
}-*/;
但是這並不起作用。
用於從JavaScript訪問Java對象的special syntax無法使用,因爲我希望這是動態的。
關於如何做到這一點的任何想法?
爲了完整性,我也希望能夠動態地設置屬性。
編輯:blwy10的回答是一個偉大的提示讓我搜索使用「gwt反射」而不是像「動態屬性訪問」的條款。這導致我gwt-ent,它有一個非常優雅的反射解決方案。我將嘗試這一個,因爲它不需要單獨的代碼生成步驟。
JS代碼GWT產生的微細化以及默認模糊 - 所以有你'name'屬性在一個編譯成爲'xz'一個很好的機會,在另一個「werq」 - 沒有辦法事先知道。你可以關閉混淆,但是這會導致一個更大的JS文件。 – 2010-08-26 02:45:31
等待。爲什麼Java反射出來? – 2010-08-26 02:48:30
@Louis:因爲我們在此處理Google Web Toolkit(GWT) - 它將Java轉換爲JavaScript,並且僅支持[Java運行時庫的一個子集](http://code.google.com/webtoolkit/doc/latest/ RefJreEmulation.html) – 2010-08-26 12:08:17