Your question should really be how does the compiler handle marker interfaces, and the answer is: No differently from any other interface. For example, suppose I declare a new marker interface Foo
:
public interface Foo {
}
... and then declare a class Bar
that implements Foo
:
public class Bar implements Foo {
private final int i;
public Bar(int i) { this.i = i; }
}
I am now able to refer to an instance of Bar
through a reference of type Foo
:
Foo foo = new Bar(5);
... and also check (at runtime) whether an object implements Foo
:
if (o instanceof Foo) {
System.err.println("It's a Foo!");
}
This latter case is typically the driver behind using marker interfaces; the former case offers little benefit as there are no methods that can be called on Foo
(without first attempting a downcast).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…