遍历所有SimpleTextBox的

问题描述:

是否有可能遍历特定类的所有'实例'?我一直四处寻找,并想出了:遍历所有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 

任何帮助将不胜感激!

首先,那个错误很奇怪,你应该可以编译它。也许这是一个不支持该方法的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