Maison > Questions et réponses > le corps du texte
伊谢尔伦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[]
.
伊谢尔伦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.
伊谢尔伦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())
阿神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