如何在Java内部类中定义绑定类型参数

时间:2013-12-08 01:26:47

标签: java generics inner-classes bounded-types

public class TowerOfHanoi<E> {
    private class Disk<T extends Comparable<E>> {
    }

    private class Peg<S extends Disk<T extends Comparable<E>>> extends Stack<Disk<T extends Comparable<E>>> {
    }
}

使用上面的代码,我收到以下编译错误。

  

令牌“extends”的语法错误,预期

但是,如果我按如下方式更改Peg的定义,则可以:

private class Peg<T extends Disk<? extends Comparable<E>>> extends Stack<Disk<? extends Comparable<E>>> {
}

我不想使用通配符。有没有办法将其更改为命名参数?

2 个答案:

答案 0 :(得分:3)

你不能使用那样的泛型。只需将类型(不是绑定)传递给扩展类型。

编译:

public class TowerOfHanoi<E> {
    private class Disk<T extends Comparable<E>> {
    }

    private class Peg<T extends Disk<Comparable<E>>> extends Stack<Disk<Comparable<E>>> {
    }
}

答案 1 :(得分:1)

你有什么理由不能使E具有可比性吗?

public class TowerOfHanoi<E extends Comparable<? super E>>
{
    private class Disk implements Comparable<Disk> { }

    private class Peg extends Stack<Disk> { }
}