10

私はこれを読んでいます:
http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.20.2

彼らが言うには:

サンプルプログラムを考えてみましょう:

class Point { int x, y; }
class Element { int atomicNumber; }
class Test {
        public static void main(String[] args) {
                Point p = new Point();
                Element e = new Element();
                if (e instanceof Point) {       // compile-time error
                        System.out.println("I get your point!");
                        p = (Point)e;           // compile-time error
                }
        }
}

のインスタンスも、その可能なサブクラス (ここには表示されていません) も、 のサブクラスのインスタンスになる可能性がinstanceofないため、式は正しくありません。ElementPoint

instanceof単純にfalse を返すのではなく、なぜこれがエラーになるのでしょうか?

ありがとう、

JDelage

4

4 に答える 4

13

instanceofcheck は実行時チェックです。コンパイラは、コンパイル時 (ずっと前) にこの条件が正しくないことを発見できるため、間違っていることがわかります。すぐに失敗することは良い習慣であり、多くの時間と神経を節約できることを常に覚えておいてください.

于 2010-12-16T11:42:33.010 に答える
11

コンパイル時にそれが決して真実ではないことを知っているからです。したがって、これはプログラマーが意図したものではないと想定しても安全です:)

ただし、おそらくより Java 技術的な説明があります。

于 2010-12-16T11:40:03.513 に答える
4

Element を Point にすることは不可能であることをコンパイラが認識しているため、コンパイル エラーが発生します。

于 2010-12-16T11:40:17.633 に答える
1

継承ツリーのため。A が B から継承された場合、B の A インスタンスを記述できます

Integer i = 3;

System.out.println(i instanceof String); // compile time error

System.out.println(i instanceof Number); // true

System.out.println(i instanceof Object); // true
于 2010-12-16T11:41:05.490 に答える