File: WildcardSubtyping2.java

package info (click to toggle)
checker-framework-java 3.2.0%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 23,104 kB
  • sloc: java: 145,916; xml: 839; sh: 518; makefile: 404; perl: 26
file content (28 lines) | stat: -rw-r--r-- 1,004 bytes parent folder | download | duplicates (3)
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
import org.checkerframework.checker.nullness.qual.*;

class WildcardSubtyping2 {
    class MyClass {}

    class MyCloneClass extends MyClass implements Cloneable {}

    class MyGeneric<@NonNull T extends @Nullable MyClass> {}

    class UseMyGeneric {
        MyGeneric<@NonNull MyCloneClass> nonNull = new MyGeneric<>();
        MyGeneric<@Nullable MyCloneClass> nullable = new MyGeneric<>();

        MyGeneric<? extends @NonNull Cloneable> interfaceNN = nonNull;
        MyGeneric<? extends @Nullable Cloneable> interfaceNull = nullable;
    }

    class MyGenericEB<@NonNull T extends @NonNull MyClass> {}

    class UseMyGenericEB {
        MyGenericEB<@NonNull MyCloneClass> nonNull = new MyGenericEB<>();
        // :: error: (type.argument.type.incompatible)
        MyGenericEB<@Nullable MyCloneClass> nullable = new MyGenericEB<>();

        MyGenericEB<? extends @NonNull Cloneable> interfaceNN = nonNull;
        MyGenericEB<? extends @Nullable Cloneable> interfaceNull = nullable;
    }
}