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