Consider these examples with the specified incorrect behavior of javac: --- public class Foo { <T> @DA Foo() { } //should be rejected, is accepted <T> @TA Foo(int i) { } //should be rejected, is accepted public <T> @DA int foo1() { return 0;} public <T> @DA void foo2() { } //should be accepted, is rejected public <T> @TA int foo3() { return 0;} public <T> @TA void foo4() { } //correctly rejected, but with suboptimal error message } @Target({ElementType.METHOD, ElementType.CONSTRUCTOR}) @interface DA { } @Target(ElementType.TYPE_USE) @interface TA { } --- This is with: $ javac -fullversion javac full version "1.8.0-b132" See: http://mail.openjdk.java.net/pipermail/type-annotations-dev/2014-March/001678.html for more details.