質問

以下の統微:

  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

場合はキャストの RelationalExpressionReferenceType が拒否されたとしてコンパイル時にエラーの instanceof 関係式も生コンパイル時にエラーとなります。その結果 instanceof 表現する。

それは、このキャスト表現を生成するコンパイル時にエラー:

(Number) "foo"

私たちはこの表現は:

("foo" instanceof Number)

お場合がありますが微妙に、その原理は同じです:

  • String が最終的にクラス
  • String な実施 Cloneable
  • そのためにはできない (Cloneable) aString
  • そのためにもできない aString instanceof Cloneable

他のヒント

私は最近遭遇したこと(と私は何が起こっていたか考え出し前に、このページに私を導いている)に関連する問題は、Eclipse環境が誤って「instanceofの」式で「互換性のない条件付きオペランドの型」を報告できるということです「instanceofは」の右側のタイプに欠けている「インポート」ステートメントが原因。私は、問題の種類はおそらく不足しているインポートは全体の問題を引き起こしたことを考え出す前に互換性がない可能性がどのように把握しようとしているときに費やしました。うまくいけば、この情報が誰かにいくつかの時間を節約できます。

コンパイラはStringが、最終的なクラスであり、Cloneableを実装していないことを知っています。 のこれまでのCloneableのインスタンスできる文字列のインスタンスはそう。それはあなたが持っている、それは常に「偽」に印刷されます実際に意味のあるテストを考えてからあなたを停止しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top