有关构建对象括号的问题

5 java casting object

我注意到有两种方法可以转换对象(区别在于外括号的位置):

 1. SimpleType simpleType = ((SimpleType) (property.getType()));
 2. SimpleType simpleType = ((SimpleType) property).getType();
Run Code Online (Sandbox Code Playgroud)

他们做同样的事吗?

Roh*_*ain 10

他们做同样的事吗?

不,他们不是.

  • 第一个是从铸造返回你的价值 property.getType()SimpleType.(调用Casting之前完成)
  • 第二个是第一投射你propertySimpleType,然后调用该getType()方法就可以了.(铸造之前进行调用).

您也可以从括号的优先级中理解它.由于它具有最高优先级,因此将首先进行评估.

第一个案例: -

所以,在((SimpleType) (property.getType()));: -

(property.getType())
Run Code Online (Sandbox Code Playgroud)

首先评估,然后执行铸造.事实上,你并不需要围绕它的括号.(比操作员property更严格地绑定到dot (.)操作cast员).因此,调用将始终在转换之前完成.除非你强制它反转,如下例所示: -

第二种情况: -

((SimpleType) property).getType(): -

((SimpleType) property)
Run Code Online (Sandbox Code Playgroud)

首先进行评估,然后完成调用.因为,由于括号强制执行的优先级较高,因此现在您已将其括property在括号内,因此它更紧密地绑定cast操作符.


Mar*_*nik 5

他们正在做两件完全不相关的事情:第一件是评估结果,getType()第二件是向下转换property变量.考虑到左侧的类型,第一个看起来像您需要的那个.请注意,在第一个示例中,您有额外的括号,这就足够了,这是如何以惯用法编写的:

SimpleType simpleType = (SimpleType) property.getType();
Run Code Online (Sandbox Code Playgroud)