package test5; import java.util.ArrayList; class TypeAnnoSuper {} interface TypeAnnoI {} @TypeAnnoA public class TypeAnno<@TypeAnnoA TT extends @TypeAnnoA String> extends @TypeAnnoA TypeAnnoSuper implements @TypeAnnoA TypeAnnoI { public @TypeAnnoA String foo(@TypeAnnoA int i) throws @TypeAnnoA Exception { @TypeAnnoA String s = new @TypeAnnoA String("bar "); Object t = s; String ss = (@TypeAnnoA String)t; ArrayList<@TypeAnnoA String> list = new ArrayList<@TypeAnnoA String>(); if (list instanceof /* @TypeAnnoA */ java.util.List) System.out.println("ok"); try { list.add(ss); } catch (@TypeAnnoA RuntimeException e) {} return "foo" + list.get(0) + i; } @TypeAnnoA double dvalue; @TypeAnnoA int ivalue @TypeAnnoA [] @TypeAnnoA [] @TypeAnnoA []; <@TypeAnnoA T extends @TypeAnnoA String> T bar(T t) { return t; } @TypeAnnoA TT getNull() { return null; } }