【发布时间】:2014-03-25 06:57:58
【问题描述】:
在我的申请中,我有一个董事会。板由单元组成。每个单元格都有一个 int 值。 有几种类型的板可以扩展板。 每种类型的 Board 都会以不同的方式表示单元格。例如,一个人会使用一个列表,而另一个人会使用一个树。
所以这是尝试过的:
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 成为泛型类型。 我该如何实现?
【问题讨论】:
-
也许在你的班级签名中加入
T extends Collection?这样你就可以使用List或Tree?对我的建议不太自信,如有必要,我想批评。 -
您能否提供一个您将用于
T的类的示例?通常,您只需将参数化类型嵌套在Board的泛型声明中,但是拥有一个不受限制的T参数并期望它是泛型的没有意义;如果T是Integer怎么办?此外,在这种情况下,仅子类化Board会比在其上使用泛型参数更有意义吗?毕竟,如果客户为他们提供代理,就必须意识到这些差异。 -
勾画两个用例真的很有帮助。特别是您打算如何使用
setValues方法,板应如何在内部访问其cells,以及T可以是什么类型(当您说“树”时,您的意思是TreeSet?如果它总是是Collection,那么这是相当微不足道的......) -
@chrylis 如何让
T成为通用的? -
您是否考虑过使用支持更高种类的Scala?毕竟,你似乎才刚刚起步。