8
votes

Type générique pour arraylist des arraylistes

dans l'initialisation de la liste normale de la matrice, Nous avions l'habitude de définir le type générique comme suit,

ArrayList[] arr=new ArrayList[n];
 for(int i=0;i<n;i++)
 {
 arr[i]=new ArrayList();
 } 


3 commentaires

Ceci est un (B> Array d'objets ArrayList


Merci Andreas .., Jusqu'à présent, je pensais que c'était une arrayliste de arraylistes, je l'ai maintenant eu, que c'est une gamme d'objets ArrayList ..! Ok alors comment pouvons-nous définir le type générique pour cela ..? Des idées..?


Voir ma réponse. Ce n'est pas possible. Pas de tableaux génériques avec Java.


5 Réponses :


12
votes

Vous pouvez simplement faire xxx

si vous avez besoin d'un tableau de listes, vous pouvez faire xxx

et ignorer ou supprimer le AVERTISSEMENT.


3 commentaires

"Ignorer ou supprimer en toute sécurité l'avertissement." Je ne pense pas que l'écriture de code qui provoque délibérément des avertissements devraient être considérés comme «sûrs».


@ Tomhawtin-tackline c'est assez sûr. Le nouveau tableau ne contient aucun objet de liste, mais il ne contient aucune liste qui ne sont pas Liste . Le compilateur n'est pas assez intelligent pour la reconnaître. (Et il n'est pas autorisé à être plus intelligent, par spécification.) Si vous souhaitez une liste de listes (pour éviter l'indirection ou l'espace supplémentaire de l'arraylist, dites), il n'y a aucun moyen de le faire sans avertissement.


Vous devez compter sur une ligne de raisonnement plutôt que de laisser le compilateur à traiter avec le non-sens. / Comme il se trouve l peut avoir une liste ajouté, bien que des compilateurs plus récents vous donnent un autre ("RAWTYPES") AVERTISSEMENT.



4
votes

Si vous voulez (vraiment) vouloir une liste de listes, c'est la déclaration correcte: xxx

Nous ne pouvons pas créer de matrices génériques. nouvelle liste [0] est une erreur de compilétime.


0 commentaires

0
votes

quelque chose comme ceci:

List<List<Number>> matrix = new ArrayList<List<Number>>();
for (int i = 0; i < numRows; ++i) {
    List<Number> row = new ArrayList<Number>();
    // add some values into the row
    matrix.add(row);
}


0 commentaires

0
votes

Vous parlez d'une gamme de listes (arraylistes à être plus spécifiques). Java n'autorise pas la génération de la matrice générique (sauf lors de l'utilisation de caractères génériques, voir paragraphe suivant). Vous devez donc oublier d'utiliser des génériques pour le tableau ou utilisez une liste au lieu d'une matrice (de nombreuses solutions proposées pour cela).

Citation de Article IBM :

Une autre conséquence du fait que les matières sont covariennes mais que les génériques ne sont pas, vous ne pouvez pas instancier d'un type de type générique (nouvelle liste [3] est illégale), à ​​moins que l'argument de type est un wildcard sans bornes (nouvelle liste [3] est légal).


0 commentaires

0
votes

Vous avez raison: cela a l'air fou. (Que son bug ...) Au lieu d'utiliser

ArrayList<String>[] list1 = new ArrayList[]{};


1 commentaires

Pourquoi créez-vous une classe anonyme?