获取小部件实例

时间:2011-01-28 02:56:41

标签: java gwt uibinder

如何从widget实例中获取类intance。在gwt中,我的小部件是pojo类的私有字段。我能够使用instanceOfPojo.returnWidget()获取小部件;方法。我可以知道如何获取小部件的实例类,以便我可以用于

   if( widget instanceof CustomWidgetClass) ?

- 让我重新说一下

让我们说,AbcClass扩展了Composite,我们可以检查是否匹配

if(widget instanceof AbcClass)  . 

但是假设我们不知道AbcClass类存在,但是我们可以获得abcClass的实例。使用这个abcClass实例,如何使用java创建类似的类,我们称之为DefClass,以便我们可以将abcClass转换为它?

2 个答案:

答案 0 :(得分:1)

如果您的小部件位于您的POJO内,那么我建议您重新访问您的设计。也许工厂对于你想做的事情来说是更好的设计。

答案 1 :(得分:0)

  

...所以如何使用它与if(widget instanceof instanceOfPojo.returnWidget())相比?

我真的很难理解你的要求。您是否尝试使用等效的widget instanceof instanceOfPojo.returnWidget(),这不起作用,因为instanceof仅适用于类文字?

要查看instanceOfPojo.returnWidget()的班级是widget班级的超类,您可以使用isAssignableFrom

instanceOfPojo.returnWidget().getClass().isAssignableFrom(widget.getClass());

要查看它们是否完全相同:

instanceOfPojo.returnWidget().getClass() == widget.getClass()

如果那不是您的意思,请尝试澄清您的问题。

编辑: OP已澄清了这个问题。

  

...我们可以获得abcClass的实例。使用这个abcClass实例,如何使用java创建类似的类

要获取类的实例,然后从中创建类似的类,则需要在运行时动态创建类。它可以在Java中动态创建一个类,但我非常怀疑你可以在GWT客户端代码中做到这一点。这是因为GWT仅支持Java的一个子集并被转换为Javascript。

  

...我们称之为DefClass,以便我们可以将abcClass转换为它?

由于abcClass的类是(“未知”)类AbcClassAbcClass直接来自Composite,因此您无法将abcClass转换为DefClass这个动态类DefClassabcClass不属于AbcClass继承层次结构(Composite - > Widget - > UIObject - > Object - > { {1}})并且您无法在事后运行时更改该继承层次结构以包含DefClass