2011-01-28 67 views
0

如何从小部件实例获取类intance。在gwt中,我的小部件是pojo类的私人领域。我能够使用instanceOfPojo.returnWidget()获取小部件;方法。可我知道如何让实例类widget的,这样我可以使用获取小部件实例

if(widget instanceof CustomWidgetClass) ? 

- 让我重新整理

让的说,AbcClass延伸复合,我们可以检查是否匹配

if(widget instanceof AbcClass) . 

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

+0

GWT支持instanceof - 你问题中的条件[if(widget instanceof CustomWidgetClass)]应该按预期工作。你能更具体地了解你遇到的问题吗? – 2011-01-28 03:00:52

+0

@Jason,是的,我知道gwt支持instanceof,问题是我的小部件不是用具体类创建的。它在instanceofPojo里面。所以如何使用它与if(widget instanceof instanceOfPojo.returnWidget())相比? – cometta 2011-01-28 03:04:06

回答

0

...所以如何使用它与if(小部件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直接从复合派生,你将无法投abcClass这个动态类DefClassDefClassabcClass继承层次结构的一部分(AbcClass - >Composite - >Widget - >UIObject - >Object),你不能改变的继承层次的事实后,在运行过程中包括DefClass

1

如果你有你的小部件在你的POJO中,那么我会建议你重新访问你的设计。也许一个工厂对你所要做的事情会是一个更好的设计。