cari

Rumah  >  Soal Jawab  >  teks badan

java - Untuk fungsi swap dalam kelas Koleksi, mengapa kod sumber perlu mentakrifkan pembolehubah Senarai akhir baru l untuk menunjuk ke senarai masuk?

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.

淡淡烟草味淡淡烟草味2751 hari yang lalu788

membalas semua(1)saya akan balas

  • 漂亮男人

    漂亮男人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 senarai ialah Senarai<?>, dan kami tidak tahu jenis tertentu, kami hanya boleh mengeluarkan Objek daripada senarai dan tidak boleh memasukkannya ke dalam senarai. list的类型是List<?>,不知道具体的类型,所以只能从列表里取出一Object,不能往列表插入。

    所以转成List。

    或者换成List<T>

    Jadi tukarkannya kepada Senarai. #🎜🎜# #🎜🎜# Atau tukar kepada Senarai<T>:#🎜🎜#
    public static <T> void swap(List<T> list, int i, int j) {...}

    balas
    0
  • Batalbalas