我注意到有两种方法可以转换对象(不同之处在于外括号的位置):
1. SimpleType simpleType = ((SimpleType) (property.getType()));
2. SimpleType simpleType = ((SimpleType) property).getType();
他们在做同样的事情吗?
他们在做同样的事情吗?
不,他们不是。
property.getType()
to SimpleType
。(调用在Casting之前完成)property
转换为SimpleType
然后getType()
在其上调用该方法。(铸造是在调用之前完成的)。也可以从括号的优先级来理解。由于它具有最高优先级,因此将首先对其进行评估。
第一种情况:-
所以,在((SimpleType) (property.getType()));
: -
(property.getType())
首先评估,然后执行铸造。实际上,您实际上并不需要括号。(与操作员的结合比操作员property
更紧密)。因此,调用将始终在强制转换之前完成。除非您在以下情况下强制它反转:-dot (.)
cast
第二种情况: -
在((SimpleType) property).getType()
: -
((SimpleType) property)
首先评估,然后调用完成。因为,现在您已将括号括property
在括号内,因此它与运算符的绑定更紧密,因为括号cast
强制执行更高的优先级。
他们正在做两件完全不相关的事情:第一是向下转换结果,getType()
第二是向下转换property
变量。鉴于左侧的类型,第一个看起来像您需要的那个。请注意,在第一个示例中,您有额外的括号,这就足够了,并且这是惯用的写法:
SimpleType simpleType = (SimpleType) property.getType();
它们是不相同的。
getType
to SimpleType
。property
为SimpleType
并调用getType
它,但结果getType
不转换为SimpleType
。他们完全在做不同的事情。它们根本不一样。
1. SimpleType simpleTypee = ((SimpleType) (property.getType()));
这首先调用属性的 getType,然后将返回的 Object 转换为 SimpleType
2. SimpleType simpletype = ((SimpleType) property).getType();
这首先将属性转换为 SimpleType,然后在 SimpleType 上调用 getType
不,他们没有做同样的事情。
SimpleType simpleTypee = ((SimpleType) (property.getType()));
首先property.getType()
将调用并将返回的对象property.getType()
转换为SimpleType
在第二种情况下
SimpleType simpletype = ((SimpleType) property).getType();
首先该对象property
将被转换为SimpleType
,然后getType()
将在该新转换的对象上调用
他们正在做其他答案中详述的不同事情。你也可以这样做
SimpleType.class.cast(property.getType());
SimpleType.class.cast(property).getType();
取决于您实际想要投射的内容。属性或 getType() 的结果。我更喜欢这种语法,因为它更明确,更容易看...