为什么这段代码需要转换?
Why does this code require casting?
我现在正在研究泛型,据我了解,我们使用泛型是为了 avoid/remove 转换的需要,那么为什么我在添加项和链表时必须转换?
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);
}
我也必须在这个方法中进行转换,并且在一个数组中??我不认为我应该将项目放入数组中,所以我有点困惑。
public void addSingle(Object item) {
add((E[]) item);
}
您不需要 cast,您添加了错误的内容。这个
for (E i: item) {
thingie.add((E) item);
}
应该是
for (E i: item) {
thingie.add(i);
}
和
list.add((E)thingie);
应该是这样的
list.addAll(thingie);
we use generics so we can avoid/remove the need to cast
这不是 100% 正确,我们对 type safety 使用泛型。缺乏需要
for casting 只是泛型给 table.
带来的众多好处之一
您需要将对象投射到
foreach 循环是因为您要添加 item
列表本身
在循环的每次迭代中添加到您的链表。你什么
应该做的是添加数组的元素。
这就是你想要做的:
for (E i: item) {
thingie.add(i);
}
您需要在此行中再次投射对象的原因:list.add((E)thingie);
,
是因为您将链表添加到链表 - 而不是元素
的名单。你应该在这里做的是遍历所有元素
并一一相加;或使用 java 的内置方法之一。
您的代码已经说明
for each E in item
。所以 item 应该是 return 一个 E
对象。另外,我不确定。但是代码:
for (E i: item) {
thingie.add((E) item);
}
应该是
for (E i: item) {
thingie.add(i);
}
这是E
的列表。基于第 3 行。不是 E
数组的列表。希望它能给出一些说明。
我现在正在研究泛型,据我了解,我们使用泛型是为了 avoid/remove 转换的需要,那么为什么我在添加项和链表时必须转换?
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);
}
我也必须在这个方法中进行转换,并且在一个数组中??我不认为我应该将项目放入数组中,所以我有点困惑。
public void addSingle(Object item) {
add((E[]) item);
}
您不需要 cast,您添加了错误的内容。这个
for (E i: item) {
thingie.add((E) item);
}
应该是
for (E i: item) {
thingie.add(i);
}
和
list.add((E)thingie);
应该是这样的
list.addAll(thingie);
we use generics so we can avoid/remove the need to cast
这不是 100% 正确,我们对 type safety 使用泛型。缺乏需要 for casting 只是泛型给 table.
带来的众多好处之一您需要将对象投射到
foreach 循环是因为您要添加 item
列表本身
在循环的每次迭代中添加到您的链表。你什么
应该做的是添加数组的元素。
这就是你想要做的:
for (E i: item) {
thingie.add(i);
}
您需要在此行中再次投射对象的原因:list.add((E)thingie);
,
是因为您将链表添加到链表 - 而不是元素
的名单。你应该在这里做的是遍历所有元素
并一一相加;或使用 java 的内置方法之一。
您的代码已经说明
for each E in item
。所以 item 应该是 return 一个 E
对象。另外,我不确定。但是代码:
for (E i: item) {
thingie.add((E) item);
}
应该是
for (E i: item) {
thingie.add(i);
}
这是E
的列表。基于第 3 行。不是 E
数组的列表。希望它能给出一些说明。