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.
(T[]) Arrays.copyOf(elementData, size, a.getClass());
La conversion forcée peut réussir car le type du tableau lui-même esta.getClass()
.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 dearray
estObject[]
au lieu deString[]
.String
est une sous-classe deObject
, maisString[]
n'est pas une sous-classe deObject[]
, donc la référence àString
dont le type réel estObject
peut être convertie enString
. Cependant,Object[]
ne peut pas être forcé dansString[]
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 utiliserArrays.copyOf()
pour ce faire.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())
Le type générique de ArrayList
E
n'est pas obligatoire lorsque le type générique n'est pas spécifié, par exemple :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