public class InnerClass { void m() { @A(1) Object o = new @A(2) Object(); if (o instanceof @A(3) String) { @A(4) String s = (@A(5) String) o; } class Inner { void m() { @B(1) Object o = new @B(2) Object(); if (o instanceof @B(3) String) { @B(4) String s = (@B(5) String) o; } } } new InnerClass() { void m() { @C(1) Object o = new @C(2) Object(); if (o instanceof @C(3) String) { @C(4) String s = (@C(5) String) o; } } }; o = new @D(2) Object(); if (o instanceof @D(3) String) { @D(4) String s = (@D(5) String) o; } } }