Comment Convertir List<String> Liste<Object>
Je veux convertir List<String>
à List<Object>
.
L'une des méthodes existantes est de retour List<String>
et je veux le convertir en List<Object>
.
Est-il un moyen direct en Java, puis d'autres à parcourir et de la conversion de l'élément par élément?
String
estObject
pourquoi avez-vous besoin?- Vous pourriez avoir besoin pour passer la liste à une fonction qui attend un
List<Object>
- Qu'est-ce exactement que vous essayez de faire? En raison du type d'effacement, une List<String> une Liste<Object>. Si il y a une méthode qui prend une Liste<Object>, cette méthode devrait être modifié pour une Liste<? extends Object>. Si vous n'êtes pas dans le contrôle de cette méthode, puis suivre aucune des réponses ci-dessous.
- Oui, j'ai obligation de se convertir à la Liste des<Object> comme je dois passer à une autre méthode qui accepte comme une Liste<Object>.
Vous devez vous connecter pour publier un commentaire.
Passer le
List<String>
en tant que paramètre au constructeur d'une nouvelleArrayList<Object>
.Tout
Collection
peut être passé en argument du constructeur, tant que son type s'étend le type de laArrayList
, commeString
s'étendObject
. Le constructeur prend unCollection
, maisList
est un subinterface deCollection
, de sorte que vous pouvez simplement utiliser leList<String>
.Java collection est juste une collection d'objets soit de chaîne ou autre. L'argument type est juste un peu de sucre. En fonction de la situation, comme face à de très grandes listes, vous pouvez le convertir, évidemment risquer de mélanger deux types d'objets différents dans la même liste.
Et de mettre un @SuppressWarning pour se débarrasser des méchants...
List<String>
et l'autre pense que c'est unList<Object>
. Si vous ajoutez des objets à l'aide de la nouvelle référence qui ne sont pas des chaînes, l'ancienne référence ne sera pas en mesure d'y accéder sans jeter unClassCastException
.callUglyLegacyCode((List) strings)
.Personnellement, tout à la fois de la top rated réponses sont, dans un sens, je ne pense pas que l'un d'entre eux permet de résoudre le problème dans un cadre élégant, réutilisable, surtout si vous devez le faire très souvent.
Supposons que vous ayez un ancien du code legacy /dépendance que vous ne pouvez pas modifier de quelque façon (de sorte qu'il serait au moins accepter
List<? extends Object>
comme @ReverendGonzo suggéré dans son commentaire. Supposons également que vous avez besoin de parler à cet héritage module de beaucoup.Je ne pense pas que ce soit coulée /la copie de tous les temps serait supportable sur le long terme. Il rend votre code soit vulnérable à insidieuse de bugs et dur à suivre, ou un peu plus (ou fondamentale) inefficace et difficile à lire.
Avoir lisible et efficace de la production de code, c'est mieux pour encapsuler la partie sale dans un module séparé qui traite de l'inoffensif par ailleurs, mais laid exprimés.
C'est assez inefficace, mais au moins vous n'avez pas à écrire beaucoup de code~
stringList.toArray()
une nouvelle alloué tableau est créé par la suite.comme dans:
Comme alternative, vous pouvez essayer le
addAll
méthode, si la liste des objets est une liste existante.model.class
public class Modèle {
}
MainActivity
public class MainActivity extends AppCompatActivity {
}