1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
import org.checkerframework.checker.nullness.qual.*;
// Field f needs to be set, b/c the upper bound is @Initialized
// :: error: (initialization.fields.uninitialized)
class Param<T extends @NonNull Object> {
T f;
void foo() {
// Valid, because upper bound is @Initialized @NonNull
f.toString();
}
}
// :: error: (type.argument.type.incompatible)
class Invalid<S extends Param<@Nullable Object>> {
void bar(S s) {
s.foo();
}
// :: error: (type.argument.type.incompatible)
<M extends Param<@Nullable Object>> void foobar(M p) {}
}
interface ParamI<T extends @NonNull Object> {}
class Invalid2<
S extends
Number &
// :: error: (type.argument.type.incompatible)
ParamI<@Nullable Object>> {}
class Invalid3 {
<
M extends
Number &
// :: error: (type.argument.type.incompatible)
ParamI<@Nullable Object>>
void foobar(M p) {}
}
|