?
is a wildcard and means any subclass of ONEITEMInterface
including itself.
T
is a specific implementation of ONEITEMInterface
in this case.
Since ?
is a wildcard, there is no relation between your ?
in the class declaration and the ?
in your method declaration hence it won't compile. Just List<?> getONEITEM();
will compile though.
The first scenario means the entire class can handle exactly one type of Bar
per instance.
interface Foo<T extends Bar> {
List<T> get();
}
The second scenario allows each instance to operate on any subtype of Bar
interface Foo {
List<? extends Bar> get()
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…