超级Java通配符

Kam*_*ami 1 java generics wildcard super comparable

我读到使用带有这样的超级通配符:

public class MyClass <T extends Comparable<? super T>> {
   ...
}
Run Code Online (Sandbox Code Playgroud)

代替:

public class MyClass <T extends Comparable<T>> {
   ...
}
Run Code Online (Sandbox Code Playgroud)

可以让这个班级"更通用",但我不明白为什么.

有人能提供一些具体的例子吗?

Uwe*_*ner 5

这样你可以为T提供一个类,它本身不实现Comparable,但是继承自实现Comparable的类.

例如

class Baseclass implements Comparable<Baseclass> {
...
}

class Inherited extends Baseclass {
...
}
Run Code Online (Sandbox Code Playgroud)

有一个规范

public class MyClass <T extends Comparable<? super T>> {
...
}
Run Code Online (Sandbox Code Playgroud)

您可以使用MyClass<Inherited>,而且MyClass<Baseclass>,而是用

public class MyClass <T extends Comparable<T>> {
...
}
Run Code Online (Sandbox Code Playgroud)

你只能使用 MyClass<Baseclass>