java - 关于使用 Java 泛型 : "type parameter S is not within its bound" 的错误

标签 java generics syntax-error

我正在使用泛型编写一些类,但找不到解决方案 对于 SolutionsSubset 类,所以我得到了错误 “类型参数 S 不在其范围内”。我看过以前的 关于相同错误的问题,但我无法为我的情况解决。 有人可以帮助我提高对泛型的了解吗?任何 引用一本好书(我可以在google中找到很多信息 但如果有人可以推荐一本书、教程等,将受到欢迎)。 虽然我试着记住提问的规则,但我 如果我的问题不符合这些规则,我深表歉意。

我有以下类和接口(interface):



public interface Subset<T extends Comparable<T>> extends Comparable<Subset<T>>
public class MathSubset<T extends Comparable<T>> extends TreeSet<T> implements Subset<T>

public interface Solution<T extends Comparable<T>>

public interface Solutions<S extends Solution<?>> extends Iterable<S>
public class SolutionsSubset<S extends Solution<?>> extends MathSubset<S> implements Solutions<S>


我需要 Subset 扩展 Comparable。在 SolutionsSubset 中,MathSubset 类存储 Solution 对象。我必须如何更改这些定义才能使其正常工作?

提前致谢

最佳答案

为了在MathSubset中用作类型参数, SolutionsSubset s S必须extend Comparable<S> .作为一个可编译的例子:

import java.util.TreeSet;

interface Subset<T extends Comparable<T>>
     extends Comparable<Subset<T>> { }

class MathSubset<T extends Comparable<T>>
    extends TreeSet<T>
    implements Subset<T>
{
    public int compareTo(Subset<T> other) { throw new Error(); }
}

interface Solution<T extends Comparable<T>> { }

interface Solutions<S extends Solution<?>> extends Iterable<S> { }

class SolutionsSubset<S extends Solution<?> & Comparable<S>>
    extends MathSubset<S>
    implements Solutions<S>
{ }

一些评论:这是一个非常抽象的例子,所以不容易思考。布置代码以便您不需要滚动是很好的。这里有很多继承,也许是组合而不是扩展 TreeSet .很难区分标识符 SolutionsSolution .

关于java - 关于使用 Java 泛型 : "type parameter S is not within its bound" 的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4423026/

相关文章:

java - 无法正确转换 JSON 数据

java - Selenium + Java |改善等待时间

java - 将 Java 类结构转换为 Python 类

.net - 对两个或多个值排序常规列表

generics - 如何在Rust中实现装饰器?

syntax-error - 仿函数中的 OCaml 语法错误

带有 "-c"和缩进问题的 Python 解释器调用

java - 重写finalize(),引用其中的对象

java - 我怎样才能让这个Java泛型代码正常工作?

python - 异常错误通过问题