我正在研究泛型,根据我的理解,我们使用泛型,因此我们可以避免/消除强制转换的需要,那么为什么我必须在添加项目和链接列表时进行投射?
def filled_rectangle(t, l, w):
t.begin_fill()
for i in range(2):
t.right(90)
t.forward(l)
t.right(90)
t.forward(w)
t.endfill()
我也必须在这个方法中进行转换,并且在数组中?我不认为我应该将项目放入数组中,所以我有点困惑。
public class ThisIsCode<E> implements Code{
LinkedList<E> list = new LinkedList<>();
public final void add(E... item) {
List<E> thingie = new LinkedList<>();
for (E i: item) {
thingie.add((E) item);
}
list.add((E)thingie);
}
答案 0 :(得分:6)
你不需要演员,你添加了错误的东西。此
for (E i: item) {
thingie.add((E) item);
}
应该是
for (E i: item) {
thingie.add(i);
}
和
list.add((E)thingie);
应该是
list.addAll(thingie);
答案 1 :(得分:1)
我们使用泛型,因此我们可以避免/消除投射的需要
这不是100%正确,我们对type safety使用泛型。缺乏必要 铸造只是仿制药带来的众多好处之一。
你需要在你的物品中投射物品的原因
foreach循环是因为您自己添加了item
列表
在循环的每次迭代中链接到您的链表。你是什么
应该做的是添加数组的元素。
这就是你的意思:
for (E i: item) {
thingie.add(i);
}
您需要在此行中再次投射对象的原因:list.add((E)thingie);
,
是因为您将链接列表添加到链接列表 - 而不是元素
列表。你应该在这里做的是迭代所有元素
并逐一添加;或使用java的内置方法之一。
答案 2 :(得分:0)
您的代码已经说明了
对于项目中的每个E
。因此,期望项目返回E
对象。另外,我不确定。但代码:
for (E i: item) {
thingie.add((E) item);
}
被认为是
for (E i: item) {
thingie.add(i);
}
这是E
的列表。基于第3行。不是E
数组的列表。希望它能给出一些澄清。