use*_*694 9 java generics syntax-error
我正在使用Generics编写一些类,但我找不到类SolutionsSubset的解决方案,所以我得到错误"类型参数S不在其范围内".我之前已经读过有关同一错误的问题,但我无法解决这个问题.有人可以帮助我提高我对仿制药的知识吗?任何对好书的参考(我可以在谷歌中找到很多信息,但如果有人可以推荐一本书,教程等,将是受欢迎的).虽然我试着记住提出问题的规则,但如果我的问题不符合这些规则我会道歉.
我有以下类和接口:
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,SolutionsSubsets 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>
{ }
Run Code Online (Sandbox Code Playgroud)
一些评论:这是一个非常抽象的例子,因此不容易思考.布置代码,所以你不需要滚动是好的.这里有很多遗产,可能是构成而不是延伸TreeSet.很难区分标识符Solutions和Solution.
首先,这是完整的错误(特定于 MathSubset 没有获得正确的参数):Bound mismatch: The type S is not a valid substitute for the bounded parameter <T extends Comparable<T>> of the type QifFixer.MathSubset<T>
问题是 MathSubset 需要一个<T extends Comparable<T>,但你给它一个S extends Solution<?>- 这些类型彼此无关,因为解决方案不会继承或实现Comparable<T>。
如果有的话,你可以尝试这个:
public class SolutionsSubset<S extends Comparable<S>> extends
MathSubset<S> implements Solutions<Solution<S>>;
Run Code Online (Sandbox Code Playgroud)
不幸的是,这仍然不起作用,因为 MathSubset 实现了 Iterable,但 Solutions 也是如此。
一个简单的修复方法是解决方案不扩展 Iterable,但在我看来,您确实正在尝试使用比您需要的更复杂的方法。也许“has-a”而不是“is-a”设计在这里可能更有利?
| 归档时间: |
|
| 查看次数: |
28588 次 |
| 最近记录: |