有关构建对象括号的问题

时间:2012-11-27 09:45:54

标签: java object casting

我注意到有两种方法可以投射物体(区别在于外括号的位置):

 1. SimpleType simpleType = ((SimpleType) (property.getType()));
 2. SimpleType simpleType = ((SimpleType) property).getType();

他们在做同样的事吗?

6 个答案:

答案 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()的结果。我更喜欢这种语法,因为它在眼睛上更明确,更容易......