Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java内部类中定义绑定类型参数 河内公共类塔楼{ 专用类磁盘{ } 私有类扩展堆栈{ } }_Java_Generics_Inner Classes_Bounded Types - Fatal编程技术网

如何在Java内部类中定义绑定类型参数 河内公共类塔楼{ 专用类磁盘{ } 私有类扩展堆栈{ } }

如何在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

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

标记“扩展”上的语法错误,应为

但是,如果我将Peg的定义更改如下,它会起作用:

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,我说的是对的。这是一个。这是因为您正在声明磁盘;如果你用磁盘替换磁盘,它就可以编译了。