簡體   English   中英

有關構建對象括號的問題

[英]Issue about casting object brackets

我注意到有兩種方法可以轉換對象(區別在於外括號的位置):

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

他們做同樣的事嗎?

他們做同樣的事嗎?

不,他們不是。

  • 第一個是將從property.getType()返回的值轉換為SimpleType 調用Casting之前完成)
  • 第二個是首先將propertySimpleType ,然后在其上調用getType()方法。 鑄件調用之前完成)。

您也可以從括號的優先級中理解它。 由於它具有最高優先級,因此將首先進行評估。

第一個案例: -

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

(property.getType())

首先評估,然后執行鑄造。 事實上,你並不需要圍繞它的括號。 property結合更緊的dot (.)除了操作者cast操作者)。 因此,調用將始終在轉換之前完成。 除非你強制它反轉,如下例所示: -

第二種情況: -

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

((SimpleType) property)

首先進行評估,然后完成調用。 至於,現在你已經封閉property的支架,因為它結合緊,里面cast運營商,由於較高的優先級用括號執行。

他們正在做兩件完全不相關的事情:第一件是對getType()的結果進行評估,第二件是向下轉換property變量。 考慮到左側的類型,第一個看起來像您需要的那個。 請注意,在第一個示例中,您有額外的括號,這就足夠了,這是如何以慣用法編寫的:

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

他們不一樣。

  • 第一個將getType的結果轉換為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();

首先將object property轉換為SimpleType ,然后在該新轉換的對象上調用getType()

他們正在做其他答案中詳細說明的不同事情。 你也可以這樣做

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

取決於你實際想要施展的內容。 屬性或getType()的結果。 我更喜歡這種語法,因為它在眼睛上更明確,更容易......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM