Rumah  >  Soal Jawab  >  teks badan

泛型 - ArrayList中toArray()为什么不支持强制类型转换?[Java]

黄舟黄舟2764 hari yang lalu617

membalas semua(4)saya akan balas

  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:44:06

    (T[]) Arrays.copyOf(elementData, size, a.getClass()); Penukaran paksa boleh berjaya kerana jenis tatasusunan itu sendiri ialah a.getClass().

    public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
        @SuppressWarnings("unchecked")
        T[] copy = ((Object)newType == (Object)Object[].class)
            ? (T[]) new Object[newLength]
            : (T[]) Array.newInstance(newType.getComponentType(), newLength);
        System.arraycopy(original, 0, copy, 0,
                         Math.min(original.length, newLength));
        return copy;
    }

    Objek tatasusunan (jenis sasaran) dibuat melalui Array.newInstance(newType.getComponentType(), newLength).


    String[] y = (String[]) x.toArray() tidak boleh dihantar kerana jenis data array ialah Object[] bukannya String[].

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:44:06

    String ialah subkelas Object, tetapi String[] bukan subkelas Object[], jadi rujukan kepada String yang jenis sebenar ialah Object boleh dihantar ke String. Walau bagaimanapun, Object[] tidak boleh dipaksa ke dalam String[] Anda hanya boleh menetapkan nilai satu demi satu dan memaksa rujukan di dalam satu demi satu dan kemudian menyalinnya (sudah tentu anda boleh menggunakan Arrays.copyOf() untuk melakukan ini. <. 🎜>

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:44:06

    Adalah sah untuk menukar nilai subkelas kembali kepada subkelas

    Hantar nilai Object[] ke dalam String[], tingkah laku ini serupa dengan (Integer)(new Object())

    balas
    0
  • 阿神

    阿神2017-04-18 10:44:06

    Jenis generik ArrayListE tidak diperlukan apabila jenis generik tidak dinyatakan, contohnya:

    ArrayList list = new ArrayList();
    list.add("test");
    list.add(123);
    list.add(11.22);

    Kaedah kedua tidak boleh digunakan dalam kes ini dan tiada cara untuk melakukan penukaran jenis paksa

    balas
    0
  • Batalbalas