私はこれを読んでいる:
http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.20.2互換性のない2つのクラスに使用すると、 `instanceof`エラーが` false`を返すのではなく、なぜですか?
彼らは言う:instanceof
式はElement
のインスタンスが正しくないためである
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
}
}
}
:
は、プログラム例を考えてみましょうまたは可能な任意のサブクラス(ここには何も表示されていません)おそらく
Point
のサブクラスのインスタンスになる可能性があります。
instanceof
がfalseを返すのではなく、なぜこれがエラーになるのですか?おかげで、
JDelage
強く型付けされてコンパイルされているのとは対照的に、ほとんどの場合、大まかに型付けされ、ほとんどが解釈された言語(例:ほとんどのBASIC)で以前の経験があるかもしれないようです。ほとんどの場合、解釈される言語では、実行時にほぼすべての型のような検証が行われます。しかし、コンパイルされた言語では、コンパイラはかなりの "タイプと実行フローの分析"を行うことができます。その結果、決して実行することができない経路を発見した場合、その経路のコード(すなわち、デッドコード除去)を除去することができる。成功しない操作が見つかった場合はエラーが発生します。 – chaotic3quilibrium