![](/img/trans.png)
[英]Why does declaring a variable as type int require casting a stream? long type does not require a cast
[英]Why does this code require casting?
我現在正在研究泛型,據我了解,我們使用泛型,因此可以避免/消除強制轉換的需要,那么為什么在添加項目和鏈表時必須強制強制轉換?
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);
}
您不需要強制轉換 ,您添加了錯誤的內容。 這個
for (E i: item) {
thingie.add((E) item);
}
應該
for (E i: item) {
thingie.add(i);
}
和
list.add((E)thingie);
應該是這樣的
list.addAll(thingie);
我們使用泛型,因此我們可以避免/消除強制轉換的需要
那不是100%正確,我們使用泛型來確保類型安全 。 無需強制轉換只是泛型帶來的眾多好處之一。
之所以需要在foreach循環中強制轉換對象,是因為您在循環的每次迭代中都將item
列表本身添加到了鏈表中。 您應該做的是添加數組的元素。
這就是您要執行的操作:
for (E i: item) {
thingie.add(i);
}
您需要在此行中再次投射對象的原因: list.add((E)thingie);
,是因為您將鏈接列表添加到鏈接列表中,而不是列表中的元素。 您在這里應該做的是遍歷所有元素,並一一添加。 或使用Java的內置方法之一。
您的代碼已經說過
對於項目中的每個E
。 因此,預期item返回E
對象。 另外,我不確定。 但是代碼:
for (E i: item) {
thingie.add((E) item);
}
應該是
for (E i: item) {
thingie.add(i);
}
它是E
的列表。 基於第三行。 不是E
數組的列表。希望可以澄清一下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.