java - Collections類(lèi)里的swap函數(shù),源碼為什么要新定義一個(gè)final的List型變量l指向傳入的list?
問(wèn)題描述
JDK1.7 源碼如下:
public static void swap(List<?> list, int i, int j) { final List l = list; l.set(i, l.set(j, l.get(i)));}
其中的這句final List l = list 有什么意義?直接操作傳進(jìn)來(lái)的list不也一樣的結(jié)果嗎?
本人是自學(xué)java的新手,看到這里有點(diǎn)想不通,希望前輩們能幫我解惑,不勝感謝!
問(wèn)題解答
回答1:試一下:
import java.util.List;public class Test { public static void swap(List<?> list, int i, int j) {list.set(i, list.set(j, list.get(i))); }}
編譯錯(cuò)誤:
.Test.java:7: 錯(cuò)誤: 無(wú)法將接口 List<E>中的方法 set應(yīng)用到給定類(lèi)型;list.set(i, list.set(j, list.get(i)));^ 需要: int,CAP#1 找到: int,CAP#2 原因: 參數(shù)不匹配; Object無(wú)法轉(zhuǎn)換為CAP#1 其中, E是類(lèi)型變量: E擴(kuò)展已在接口 List中聲明的Object 其中, CAP#1,CAP#2是新類(lèi)型變量: CAP#1從?的捕獲擴(kuò)展Object CAP#2從?的捕獲擴(kuò)展Object1 個(gè)錯(cuò)誤
因?yàn)閘ist的類(lèi)型是List<?>,不知道具體的類(lèi)型,所以只能從列表里取出一Object,不能往列表插入。
所以轉(zhuǎn)成List。
或者換成List<T>:
public static <T> void swap(List<T> list, int i, int j) {...}
