如何在Java内部类中定义绑定类型参数 河内公共类塔楼{ 专用类磁盘{ } 私有类扩展堆栈{ } }
使用上面的代码,我得到以下编译错误 标记“扩展”上的语法错误,应为 但是,如果我将Peg的定义更改如下,它会起作用:如何在Java内部类中定义绑定类型参数 河内公共类塔楼{ 专用类磁盘{ } 私有类扩展堆栈{ } },java,generics,inner-classes,bounded-types,Java,Generics,Inner Classes,Bounded Types,使用上面的代码,我得到以下编译错误 标记“扩展”上的语法错误,应为 但是,如果我将Peg的定义更改如下,它会起作用: public class TowerOfHanoi<E> { private class Disk<T extends Comparable<E>> { } private class Peg<S extends Disk<T extends Comparable<E>>> exte
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>>> {
}
}
private class Peg有什么原因不能使E
具有可比性吗
private class Peg<T extends Disk<? extends Comparable<E>>> extends Stack<Disk<? extends Comparable<E>>> {
}
E
汉诺威的公共塔楼有什么原因不能让E
具有可比性吗
private class Peg<T extends Disk<? extends Comparable<E>>> extends Stack<Disk<? extends Comparable<E>>> {
}
公共类TowerOfHanoi你不能像那样使用泛型。只需将类型(而不是绑定)传递给扩展类型
这包括:
public class TowerOfHanoi<E extends Comparable<? super E>>
{
private class Disk implements Comparable<Disk> { }
private class Peg extends Stack<Disk> { }
}
河内公共类塔楼{
专用类磁盘{
}
私有类扩展堆栈{
}
}
你不能像那样使用泛型。只需将类型(而不是绑定)传递给扩展类型
这包括:
public class TowerOfHanoi<E extends Comparable<? super E>>
{
private class Disk implements Comparable<Disk> { }
private class Peg extends Stack<Disk> { }
}
河内公共类塔楼{
专用类磁盘{
}
私有类扩展堆栈{
}
}
我的理解是,没有。它将接受任何扩展可比的类。Disk
实现必须定义为Disk
,但您可以使用compariable
的任何子类,itI最终使Disk成为非泛型类型。最后,这比实际的算法占用了更多的时间,所以看起来我让它变得不必要的复杂。不过我会接受你的回答。我的理解是不会。它将接受任何扩展可比的类。Disk
实现必须定义为Disk
,但您可以使用compariable
的任何子类,itI最终使Disk成为非泛型类型。最后,这比实际的算法占用了更多的时间,所以看起来我让它变得不必要的复杂。不过我会接受你的回答。我考虑过,但这似乎不是正确的做法。磁盘需要相互比较,所以我觉得只有Disk类应该对类型施加限制,而不是外部类TowerOfHanoi。如果您发现一个反对的论点,请告诉我。如果TowerOfHanoi
将创建磁盘的实例,那么E
需要具有可比性。这是不正确的;使用上面@Bohemian的解决方案,它将在不使E具有可比性的情况下工作。正如我在上面的评论中提到的,我最终还是把它清理干净了。@AbhijitSarkar,我说的是对的。这是一个。这是因为您正在声明磁盘;如果你用磁盘替换磁盘,它会编译得很好。我考虑过,但这似乎不是正确的做法。磁盘需要相互比较,所以我觉得只有Disk类应该对类型施加限制,而不是外部类TowerOfHanoi。如果您发现一个反对的论点,请告诉我。如果TowerOfHanoi
将创建磁盘的实例,那么E
需要具有可比性。这是不正确的;使用上面@Bohemian的解决方案,它将在不使E具有可比性的情况下工作。正如我在上面的评论中提到的,我最终还是把它清理干净了。@AbhijitSarkar,我说的是对的。这是一个。这是因为您正在声明磁盘;如果你用磁盘替换磁盘,它就可以编译了。