instanceof-互換性のない条件付きのオペランド種類
-
23-09-2019 - |
質問
以下の統微:
Object o = new Object();
System.out.println(o instanceof Cloneable);
でもこれは当てはまりません:
String s = new String();
System.out.println(s instanceof Cloneable);
コンパイラエラーがスローされます。
何が問題なのでしょうか。
解決
より露骨身の問題は次の通りです:
if ("foo" instanceof Number)
// "Incompatible conditional operand types String and Number"
ここで指定された 環太平洋の15.20.2型比較演算子 instanceof
:
RelationalExpression: RelationalExpression instanceof ReferenceType
場合はキャストの RelationalExpression の ReferenceType が拒否されたとしてコンパイル時にエラーの
instanceof
関係式も生コンパイル時にエラーとなります。その結果instanceof
表現する。
それは、このキャスト表現を生成するコンパイル時にエラー:
(Number) "foo"
私たちはこの表現は:
("foo" instanceof Number)
お場合がありますが微妙に、その原理は同じです:
String
が最終的にクラスString
な実施Cloneable
- そのためにはできない
(Cloneable) aString
- そのためにもできない
aString instanceof Cloneable
他のヒント
私は最近遭遇したこと(と私は何が起こっていたか考え出し前に、このページに私を導いている)に関連する問題は、Eclipse環境が誤って「instanceofの」式で「互換性のない条件付きオペランドの型」を報告できるということです「instanceofは」の右側のタイプに欠けている「インポート」ステートメントが原因。私は、問題の種類はおそらく不足しているインポートは全体の問題を引き起こしたことを考え出す前に互換性がない可能性がどのように把握しようとしているときに費やしました。うまくいけば、この情報が誰かにいくつかの時間を節約できます。
コンパイラはString
が、最終的なクラスであり、Cloneable
を実装していないことを知っています。 のこれまでのはCloneable
のインスタンスできる文字列のインスタンスはそう。それはあなたが持っている、それは常に「偽」に印刷されます実際に意味のあるテストを考えてからあなたを停止しています。
所属していません StackOverflow