5

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

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

他们在做同样的事情吗?

4

6 回答 6

10

他们在做同样的事情吗?

,他们不是。

  • 第一个是将返回的值转换为 property.getType()to SimpleType。(调用Casting之前完成)
  • 第二个是首先将您的目标property转换为SimpleType然后getType()在其上调用该方法。(铸造是在调用之前完成的)。

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

第一种情况:-

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

(property.getType())

首先评估,然后执行铸造。实际上,您实际上并不需要括号。(与操作员的结合比操作员property更紧密)。因此,调用将始终在强制转换之前完成。除非您在以下情况下强制它反转:-dot (.)cast

第二种情况: -

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

((SimpleType) property)

首先评估,然后调用完成。因为,现在您已将括号括property在括号内,因此它与运算符的绑定更紧密,因为括号cast强制执行更高的优先级。

于 2012-11-27T09:47:25.437 回答
5

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

SimpleType simpleType = (SimpleType) property.getType();
于 2012-11-27T09:47:16.263 回答
3

它们是不相同的。

  • 第一个将结果转换为getTypeto SimpleType
  • 第二个转换propertySimpleType并调用getType它,但结果getType不转换为SimpleType
于 2012-11-27T09:47:40.077 回答
1

他们完全在做不同的事情。它们根本不一样。

 1. SimpleType simpleTypee = ((SimpleType) (property.getType()));

这首先调用属性的 getType,然后将返回的 Object 转换为 SimpleType

 2. SimpleType simpletype = ((SimpleType) property).getType();

这首先将属性转换为 SimpleType,然后在 SimpleType 上调用 getType

于 2012-11-27T09:48:09.070 回答
1

不,他们没有做同样的事情。

SimpleType simpleTypee = ((SimpleType) (property.getType()));

首先property.getType()将调用并将返回的对象property.getType()转换为SimpleType

在第二种情况下

SimpleType simpletype = ((SimpleType) property).getType();

首先该对象property将被转换为SimpleType,然后getType()将在该新转换的对象上调用

于 2012-11-27T09:49:01.857 回答
1

他们正在做其他答案中详述的不同事情。你也可以这样做

SimpleType.class.cast(property.getType());
SimpleType.class.cast(property).getType();

取决于您实际想要投射的内容。属性或 getType() 的结果。我更喜欢这种语法,因为它更明确,更容易看...

于 2012-11-27T09:49:10.100 回答