在我的申请中,我有一个董事会。董事会由单元组成。每个单元格都有一个int值。 很少有类型的董事会会扩展董事会。 每种类型的电路板将以不同的方式表示电池。例如,一个人会使用一个List,而另一个人会使用一个Tree。
所以这就是尝试的内容:
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成为通用类型。 我该如何实现?
答案 0 :(得分:1)
我发现你的方法太复杂了。 Peter.petrov接近我将要做的事。
如果你需要List和Tree(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;
}
}
如果您需要(出于某种原因需要额外的东西,请扩展此类并实现/覆盖将执行特殊操作的方法)。希望我能帮到你,但我真的没有为你的例子看到一个用例。
答案 1 :(得分:0)
我并不认为在这里需要使用泛型。
public abstract class Board {
Holder<Cell> cells;
protected abstract void setValues(Integer[] values);
}
现在让你的List和Tree实现/扩展Holder
你可以有两个类ListHolder和TreeHolder都持有
单元格,但一个由List支持,另一个由Tree支持。
实际上,setValues
可能更有意义
ListHolder和TreeHolder实现的Holder方法。
答案 2 :(得分:0)
你需要有类似的东西:
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;
}
}