12
votes

Ne peut pas lancer de arraylist à ArrayList

Dans un morceau de code que j'ai écrit, j'ai cette ligne: xxx

Je reçois une erreur sur une erreur non valide d'un ArrayListe TO ArrayList . Pourquoi ce n'est-il pas légal?


4 commentaires

... d'accord, alors quelle est votre question ?


Dupliqué possible de Generics à Java


Regardez le titre, ne peut pas lancer de arraylist à ArrayList


Votre arraylist doit être changé en arraylist . Ensuite, cela fonctionnera pour les sous-classes de CLSPRITE, mais vous ne pouvez pas ajouter de nouveaux éléments à une telle arraylist


4 Réponses :


5
votes

Ce casting est simplement illégal en Java; Une liste de parent ne peut pas être lancée à une liste d'enfant. En outre, la distribution à ArrayList est dangereuse et trop restrictive. Vous pouvez résoudre les deux problèmes en apportant le type de allSprions Be Liste .


2 commentaires

Comment ferais-je cela comme j'ai besoin des fonctions de ma classe personnalisée, CLSprites.


Vous pouvez simplement lancer chaque objet dans la liste comme vous l'utilisez, ou vous pouvez créer une nouvelle liste list et déplacer les objets de l'autre liste dans un Pour boucle. Aucune solution ne semble idéale mais j'ai bien peur qu'il n'y ait pas de manière plus propre.



7
votes

Il est fondamentalement dangereux de lancer une arrayliste à un arraylist ou vice-versa. Cela ouvre ainsi un trou dans le système de type, et Java lancera un Classcastexception au moment de l'exécution si vous essayez ceci.

La raison est que je pouvais faire quelque chose comme ceci: < PRE> XXX

C'est la raison, d'ailleurs, que les conversions implicites de Java entre les tableaux sont cassées et pourquoi il y a ArraSystoreException . Cette distribution n'est pas sûre dans tous les cas.


0 commentaires

17
votes

D'autres ont déjà expliqué le problème, mais dans ce cas, il y a une solution très simple pour cela. laissez simplement la distribution et votre code compilera. strong> :): xxx pré>

pourquoi? p>

Regardez à la signature du getparcelableArrayList Code> Méthode: P>

public ArrayList<Parcelable> getParcelableArrayList(String key)


2 commentaires

Merci pour la grande explication, j'ai essayé de définir la valeur d'une arrayliste à l'aide d'un opérateur ternaire, qui ne fonctionne pas. Et cette réponse l'explique parfaitement.


Merci ce bug moi pour toujours, je t'aime



26
votes

Une solution simple consiste à définir le type d'élément de retour tel que

Arraylist ALLSPRITES = SAVEDInsTanState. GETPARCELABARRAYLIST ("ALLSPRITES")


4 commentaires

C'est la réponse la plus simple et brillante à ce problème. Cela devrait être la réponse acceptée, je suppose.


Et il est compatible avec le compilateur Javac (utilisé par AndroidStudio). Casting générique J'ai utilisé des travaux dans Eclipse, mais pas dans Android Studio. Devrait être accepté la réponse.


En réalité, le paramètre de type n'est pas nécessaire à la méthode getparcelableArrayList . Voir Ma réponse pour plus de détails.


Merci ce bug moi pour toujours, je t'aime