recherche

Maison  >  Questions et réponses  >  le corps du texte

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

黄舟黄舟2766 Il y a quelques jours621

répondre à tous(4)je répondrai

  • 伊谢尔伦

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

    (T[]) Arrays.copyOf(elementData, size, a.getClass()); La conversion forcée peut réussir car le type du tableau lui-même est 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;
    }

    Objet tableau (de type cible) créé via Array.newInstance(newType.getComponentType(), newLength).


    String[] y = (String[]) x.toArray() ne peut pas être casté car le type de données de array est Object[] au lieu de String[].

    répondre
    0
  • 伊谢尔伦

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

    String est une sous-classe de Object, mais String[] n'est pas une sous-classe de Object[], donc la référence à String dont le type réel est Object peut être convertie en String. Cependant, Object[] ne peut pas être forcé dans String[] Vous ne pouvez attribuer des valeurs qu'une par une et forcer les références à l'intérieur une par une, puis les copier (bien sûr, vous pouvez utiliser Arrays.copyOf() pour ce faire.

    répondre
    0
  • 伊谢尔伦

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

    Il est légal de reconvertir la valeur de la sous-classe en sous-classe

    Transformez la valeur de Object[] en String[], ce comportement est similaire à (Integer)(new Object())

    répondre
    0
  • 阿神

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

    Le type générique de ArrayListE n'est pas obligatoire lorsque le type générique n'est pas spécifié, par exemple :

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

    La deuxième méthode n'est pas applicable dans ce cas, et il n'y a aucun moyen d'effectuer une conversion de type forcée

    répondre
    0
  • Annulerrépondre