オブジェクトをキャストするには 2 つの方法があることに気付きました (違いは外側の括弧の配置です)。
1. SimpleType simpleType = ((SimpleType) (property.getType()));
2. SimpleType simpleType = ((SimpleType) property).getType();
彼らは同じことをしていますか?
彼らは同じことをしていますか?
いいえ、そうではありません。
property.getType()
ことSimpleType
です。(呼び出しはキャストの前に行われます)property
からメソッドSimpleType
を呼び出しますgetType()
。(キャストはInvocationの前に行われます)。括弧の優先順位からも理解できます。優先度が最も高いため、最初に評価されます。
最初のケース: -
だから、で((SimpleType) (property.getType()));
: -
(property.getType())
最初に評価され、次にキャストが実行されます。実際、それを括弧で囲む必要はありません。(オペレーターよりもオペレーターproperty
に強くバインドします)。したがって、呼び出しは常にキャストの前に行われます。以下の場合のように強制的に逆にしない限り: -dot (.)
cast
2番目のケース: -
中((SimpleType) property).getType()
: -
((SimpleType) property)
が最初に評価され、次に呼び出しが行われます。As をproperty
括弧で囲みました。これにより、括弧によって強制される優先順位が高くなるため、演算子により強くバインドされます。cast
彼らはまったく関係のない 2 つのことを行っています。1 つ目は結果のダウンキャストであり、2 つ目は変数getType()
のダウンキャストです。property
左側の型を考えると、最初のものは必要なもののように見えます。最初の例では余分な括弧があることに注意してください。これで十分であり、慣用的に書かれている方法です。
SimpleType simpleType = (SimpleType) property.getType();
それらは同じではありません。
getType
最初はtoの結果をキャストしSimpleType
ます。property
してそれSimpleType
を呼び出しますgetType
が、 の結果は にgetType
キャストされませんSimpleType
。彼らは完全に異なることをしています。それらはまったく同じではありません。
1. SimpleType simpleTypee = ((SimpleType) (property.getType()));
これは最初にプロパティの getType を呼び出し、次に返されたオブジェクトを SimpleType にキャストします。
2. SimpleType simpletype = ((SimpleType) property).getType();
これは、最初にプロパティを SimpleType にキャストし、次に SimpleType で getType を呼び出します。
いいえ、彼らは同じことをしていません。
SimpleType simpleTypee = ((SimpleType) (property.getType()));
最初にproperty.getType()
が呼び出され、 によって返されたオブジェクトproperty.getType()
がキャストされますSimpleType
そして2番目のケースでは
SimpleType simpletype = ((SimpleType) property).getType();
最初にオブジェクトproperty
がキャストされSimpleType
、次にgetType()
その新しくキャストされたオブジェクトで呼び出されます
他の回答で詳述されているように、彼らはさまざまなことを行っています。これを行うことでキャストすることもできます
SimpleType.class.cast(property.getType());
SimpleType.class.cast(property).getType();
実際にキャストしたいものに応じて。プロパティまたは getType() の結果。より明示的で見やすいので、私はこの構文を好みます...