2
public class ChampionsLeague<Team extends Comparable<Team>> extends League<Team>{
...

如何创建此类的实例?

ChampionsLeague<Team> league = new ChampionsLeague<>();

这不起作用:

“绑定不匹配:该类型Team不是该类型的有界参数<Team extends Comparable<Team>>的有效替代品ChampionsLeague<Team>

4

1 回答 1

9

在您的代码中,Team它只是一个占位符(在这种情况下,称为Type Variable)并且恰好隐藏了 type Team,而不是引用它。换句话说,该声明等同于:

public class ChampionsLeague<T extends Comparable<T>> extends League<T> {

所以它实际上只是要求一个实现(扩展)Comparable自身的类(或接口)。所以这个例子:

public class Ball implements Comparable<Ball> {
    @Override
    public int compareTo(Ball o) { return 0; }
}
// or: public interface Ball extends Comparable<Ball> { }

将工作:

ChampionsLeague<Ball> test = new ChampionsLeague<Ball>();


编辑:

您可能试图实现的一些可能性:

// ChampionsLeague needs a type Comparable to Team
public class ChampionsLeague<T extends Comparable<Team>> extends League<T> {

或者

// ChampionsLeague needs a subtype of Team
// In this case, you can make Team implement Comparable<Team> in its own decl.
public class ChampionsLeague<T extends Team> extends League<T> {
于 2013-06-10T06:40:35.607 回答