| import java.lang.annotation.ElementType; |
| |
| class MyEnumSet<E extends Enum<E>> {} |
| |
| public class Enums { |
| public enum VarFlags { |
| IS_PARAM, |
| NO_DUPS |
| }; |
| |
| public MyEnumSet<VarFlags> var_flags = new MyEnumSet<>(); |
| |
| VarFlags f1 = VarFlags.IS_PARAM; |
| |
| void foo1(MyEnumSet<VarFlags> p) {} |
| |
| void foo2(MyEnumSet<ElementType> p) {} |
| |
| <E extends Enum<E>> void mtv(Class<E> p) {} |
| |
| <T extends Object> T checkNotNull(T ref) { |
| return ref; |
| } |
| |
| <T extends Object, S extends Object> T checkNotNull2(T ref, S ref2) { |
| return ref; |
| } |
| |
| class Test<T extends Enum<T>> { |
| void m(Class<T> p) { |
| checkNotNull(p); |
| } |
| |
| public <SSS extends Object> SSS firstNonNull(SSS first, SSS second) { |
| @SuppressWarnings("nullness:nulltest.redundant") |
| SSS res = first != null ? first : checkNotNull(second); |
| return res; |
| } |
| } |
| |
| class Unbound<X extends Object> {} |
| |
| class Test2<T extends Unbound<S>, S extends Unbound<T>> { |
| void m(Class<T> p, Class<S> q) { |
| checkNotNull2(p, q); |
| } |
| } |
| } |