如何从widget实例中获取类intance。在gwt中,我的小部件是pojo类的私有字段。我能够使用instanceOfPojo.returnWidget()获取小部件;方法。我可以知道如何获取小部件的实例类,以便我可以用于
if( widget instanceof CustomWidgetClass) ?
- 让我重新说一下
让我们说,AbcClass扩展了Composite,我们可以检查是否匹配
if(widget instanceof AbcClass) .
但是假设我们不知道AbcClass类存在,但是我们可以获得abcClass的实例。使用这个abcClass实例,如何使用java创建类似的类,我们称之为DefClass,以便我们可以将abcClass转换为它?
答案 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
的类是(“未知”)类AbcClass
而AbcClass
直接来自Composite,因此您无法将abcClass
转换为DefClass
这个动态类DefClass
。 abcClass
不属于AbcClass
继承层次结构(Composite
- > Widget
- > UIObject
- > Object
- > { {1}})并且您无法在事后运行时更改该继承层次结构以包含DefClass
。