Для кода ниже,компиляции проверка времени с использованием InstanceOf
package java_instanceof;
/*
*
* Object I0
* I1 I2 ^ \ .^
* . . | \ . |
* . . | \ ______ . |
* . . C1 |__B___| I3
* . . / .
* .. / .
* C2 .
* ^ .
* | .
* | .
* | .
* C3
*
*/
interface I0{}; interface I1{}; interface I2 {};
interface I3 extends I0{};
class C1{}; class B implements I0{};
class C2 extends C1 implements I1, I2 {}
class C3 extends C2 implements I3 {}
public class Example {
public static void main(String[] args) {
Object o; Object[] oa;
I0 i0; I0[] i0a;
I1 i1; I1[] i1a;
I2 i2; I2[] i2a;
I3 i3; I3[] i3a;
C1 c1; C1[] c1a;
C2 c2; C2[] c2a;
C3 c3; C3[] c3a;
B b; B[] ba;
//Compile time check
boolean value1 = c3 instanceof B; //compile time check error
boolean value2 = b instanceof C3; // compile time check error
}
}
Как новичок, я хотел бы знать, как это javac
в состоянии поднять компиляции ошибки времени Incompatible conditional operand type
? Является ли полная иерархия классов известной во время компиляции?
«Является ли иерархия классов известной во время компиляции?» - Ну, да, что вы ожидали? – Smutje
Вы можете прочитать [исключения времени компиляции в JLS] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-11.html#jls-11.2) –