如何从小部件实例获取类实例。在gwt中,我的小部件是pojo类的私有字段。我能够使用instanceOfPojo.returnWidget()获取小部件;方法。我可以知道如何获取小部件的实例类,以便可以用于
if( widget instanceof CustomWidgetClass) ?
-
我改一下
假设,AbcClass扩展了Composite,我们可以检查是否与
if(widget instanceof AbcClass) .
但是可以说我们不知道类AbcClass存在,但是我们可以获取abcClass的实例。使用abcClass的这个实例,如何使用Java创建类似的类,我们将其称为DefClass,以便可以将abcClass强制转换为它。
最佳答案
...因此,与if(widget instanceof instanceOfPojo.returnWidget())相比,我该如何使用它?
我真的很难理解您的要求。您是否要获得等效的widget instanceof instanceOfPojo.returnWidget()
,而该等效项由于instanceof
仅适用于Class文字而无法使用?
要查看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
的类是(“ unknown”)类AbcClass
,并且AbcClass
直接从Composite派生,因此您将无法将abcClass
强制转换为该动态类DefClass
。 DefClass
不属于abcClass
继承层次结构(AbcClass
-> Composite
-> Widget
-> UIObject
-> Object
),并且您不能更改该继承层次结构以包含在事实运行后。