import org.checkerframework.checker.nullness.qual.*; public class NullableGeneric<T> { public static class NullablePair<T1 extends @Nullable Object, T2 extends @Nullable Object> { public @Nullable T1 a; public @Nullable T2 b; public @NonNull T1 nna; public @NonNull T2 nnb; public NullablePair(T1 a, T2 b) { this.a = a; this.b = b; //:: error: (assignment.type.incompatible) this.nna = a; //:: error: (assignment.type.incompatible) this.nnb = b; } } @Nullable T next1 = null, next2 = null; private NullablePair<@Nullable T, @Nullable T> return1() { NullablePair<@Nullable T, @Nullable T> result = new NullablePair<@Nullable T, @Nullable T>(next1, null); // setnext1(); return result; } public static <T3> @NonNull T3 checkNotNull(@Nullable T3 object) { if (object == null) { throw new NullPointerException(); } else { return object; } } }