2012-08-10 96 views
0

是否有可能遍歷特定類的所有'實例'?我一直四處尋找,並想出了:遍歷所有SimpleTextBox的

 for (Field field : SimpleCheckBox.class.getFields()) { 
     System.out.println(field.getName()); 
    } 

我想通過所有的領域,並實現他們的一些功能,而無需單獨選擇它們。上面的代碼給出了錯誤:

java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:616) 
at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:396) 
at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200) 
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:525) 
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363) 
at java.lang.Thread.run(Thread.java:679) 
Caused by: java.lang.Error: Unresolved compilation problem: The method getFields() is undefined for the type Class 

任何幫助將不勝感激!

回答

1

首先,那個錯誤很奇怪,你應該可以編譯它。也許這是一個不支持該方法的GWT問題,但在普通的舊Java中它會起作用。

但它不會像你期望的那樣工作。它會給你在類中定義的字段(「屬性」),而不是類本身的實例(UI概念中的字段與OP概念中的字段不同)。

到目前爲止,還沒有簡單的方法來獲取當前類的所有實例。

如果你想要的是(因爲它看起來像)獲得在一個容器中所有的複選框,並做一些操作,也許你想要做的是檢索的所有容器的組件並與instanceof運營商檢查他們。

+0

非常感謝您的回覆,將遍歷容器中的組件。 +1 :) – Lexus 2012-08-10 13:08:57

+1

GWT中不支持大多數反射,因爲這需要編譯所有可能的類型/字段/方法,所以編譯器無法刪除大量代碼。 GWT中的'java.lang.Class'不支持'getFields'等等。有關JRE支持的更多詳細信息,請參閱https://developers.google.com/web-toolkit/doc/latest/RefJreEmulation,特別是關於'Class'的詳細信息。 – 2012-08-11 22:56:31