java - Warum muss der Quellcode für die Swap-Funktion in der Collections-Klasse eine neue endgültige Listenvariable l definieren, um auf die eingehende Liste zu verweisen?
淡淡烟草味
淡淡烟草味 2017-05-17 10:05:33
0
1
692
Der

JDK1.7-Quellcode lautet wie folgt:

public static void swap(List<?> list, int i, int j) {
    final List l = list;
    l.set(i, l.set(j, l.get(i)));
}

Was bedeutet dieser Satzfinal List l = list? Wäre es nicht dasselbe, wenn Sie die übergebene Liste direkt manipulieren würden?

Ich bin ein Neuling im Selbstlernen von Java, wenn ich das sehe. Ich hoffe, die Senioren können mir helfen, meine Verwirrung zu klären.

淡淡烟草味
淡淡烟草味

Antworte allen(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)));
    }
}

编译错误:

.\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 个错误

因为list的类型是List<?>,不知道具体的类型,所以只能从列表里取出一Object,不能往列表插入。

所以转成List。

或者换成List<T>:

public static <T> void swap(List<T> list, int i, int j) {...}
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!