[英]java “generic generic type”
在我的申请中,我有一个董事会。 董事会由单元组成。 每个单元格都有一个int值。 扩展董事会的董事会类型很少。 每种类型的董事会将代表不同的单元。 例如,一个将使用列表,另一个将使用树。
所以这是尝试的方法:
public abstract class Board<T> {
T<Cell> cells; //error - The type T is not generic; it cannot be parameterized with arguments <Cell>
protected abstract void setValues(T<Integer> values);
}
不幸的是,我不能使T为泛型类型。 我该如何实施?
我发现您的方法太复杂了。 Peter.petrov接近我要做的事情。
如果您需要列表和树(TreeSet),则两者都实现接口Collection,所以为什么不使用它呢? 除了添加,删除,迭代之外,您是否还需要其他任何工作?
这样您就可以上课了(我添加了一点Java8功能)
public abstract class Board {
Collection<Cell> cells;
// Don't need to be abstract
protected void setValues(Collection<Integer> values) {
Stream<Cell> transformed = values.stream().map(Cell::new);
cells.addAll(transformed.collect(Collectors.toList()));
}
}
class Cell {
private Integer value;
Cell(Integer value) {
this.value = value;
}
}
如果需要(出于某些原因,请扩展此类并实现/重写将具有特殊行为的方法)。 希望我能提供帮助,但我确实看不到您的示例的用例。
我真的没有在这里使用泛型的必要。
public abstract class Board {
Holder<Cell> cells;
protected abstract void setValues(Integer[] values);
}
现在有了您的列表和树实现/扩展持有人。
您可以有两个类ListHolder和TreeHolder都持有
单元格,但一个由列表支持,另一个由树支持。
实际上,将setValues
设置为a更有意义
ListHolder和TreeHolder都实现的Holder上的方法。
您将需要具有以下内容:
public abstract class Board<T extends OtherGenericClass<TT>, TT> {
T cells;
public Board(T cells) {
this.cells = cells;
}
protected abstract void setValues(T<Integer> values);
public static void main(String[] args) {
Cell<Integer> cells = new Cell<Integer>();
Board<Cell<Integer>,Integer> board = new Board<Cell<Integer>,Integer>(cells);
}
}
尽管这似乎并不像您想要的...我想您宁愿这样:
public abstract class Board<T> {
Cell<T>[] cells;
public Board(Cell<T>[] cells) {
this.cells = cells;
}
}
与Cell
类:
public abstract class Cell<T> {
T cellValue;
public Cell(T cellValue) {
return cellValue;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.