[英]Issue about casting object brackets
我注意到有兩種方法可以轉換對象(區別在於外括號的位置):
1. SimpleType simpleType = ((SimpleType) (property.getType()));
2. SimpleType simpleType = ((SimpleType) property).getType();
他們做同樣的事嗎?
他們做同樣的事嗎?
不,他們不是。
property.getType()
返回的值轉換為SimpleType
。 ( 調用在Casting之前完成) property
為SimpleType
,然后在其上調用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.