Rumah > Soal Jawab > teks badan
Kod sumber JDK1.7 adalah seperti berikut:
public static void swap(List<?> list, int i, int j) {
final List l = list;
l.set(i, l.set(j, l.get(i)));
}
Apakah maksud ayat iniSenarai akhir l = senarai? Bukankah sama jika anda memanipulasi secara langsung senarai yang diluluskan?
Saya seorang pemula dalam pembelajaran kendiri Saya agak keliru apabila saya melihat ini. Saya harap senior dapat membantu saya menyelesaikan kekeliruan saya.
漂亮男人2017-05-17 10:07:33
Cubalah:
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)));
}
}
Ralat kompilasi:
.\Test.java:7: 错误: 无法将接口 List<E>中的方法 set应用到给定类型;
list.set(i, list.set(j, list.get(i)));
^
需要: int,CAP#1
找到: int,CAP#2
原因: 参数不匹配; Object无法转换为CAP#1
其中, E是类型变量:
E扩展已在接口 List中声明的Object
其中, CAP#1,CAP#2是新类型变量:
CAP#1从?的捕获扩展Object
CAP#2从?的捕获扩展Object
1 个错误
Oleh kerana jenis list
的类型是List<?>
,不知道具体的类型,所以只能从列表里取出一Object,不能往列表插入。
所以转成List。
或者换成List<T>
public static <T> void swap(List<T> list, int i, int j) {...}