Comment faire un réseau multidimensionnel d'éléments génériques dans Java?
Considérez la classe: p> lorsque j'essaie de créer un tableau multidimensionnel: P > A<String>[][] array = (A<String>[][]) (new Object[2]3]);
7 Réponses :
J'ai pu faire quelque chose comme ça de la suggestion de @ dsg Les suivants sautent la création d'un temporaire objet. p> ou (suggestion de @ ORDREPUTABLE) p>
Je crois que ce qui suit fonctionne également: `@suppresswarnings (" non cochéra ") a
@DSG Vous êtes extrêmement drôle. Array.Newinstance (A.Class, 2, 3) Code> est exactement le même que nouveau A [2] [3] code>
Merci aux commentaires que j'ai capables de créer une solution.
Comme nous l'avons vu, ici Comment construire un a 2x3 code> tableau de A @SuppressWarnings("unchecked")
A<String>[][] array = (A<String>[][]) java.lang.reflect.Array.newInstance(A.class,2,3);
Existe-t-il un moyen d'obtenir la classe de l'objet de base sans l'instancier?
Pendant que je suis content que vous ayez compris cela, la question brûlante est toujours pourquoi aller à tous ces problèmes sur l'utilisation de ArrayList
Non, c'est le problème. Avant de l'instancier, il n'ya pas de moyen de déterminer son type. Consultez ma réponse, vous pouvez utiliser a > [] [] Code> pour votre tableau.
Vous ne pouvez pas créer de gamme de génériques spécifiques à un type de manière simple.
List<String>[] list = new List<String>[2]; //Illegal List<?> aa[] = new List<?>[2]; // OK ... A<?>[][] array = new A<?>[2][3]; // OK A[0][0] = new A<String>(...);
C'est cool! Je suppose que vous pouvez faire a
Ouais, mais de cette façon, vous aurez une avertissement de moulage non coché, pour empêcher son ajout d'ajouter @suppresswarnings ("non coché")
hmm, je pensais que les matrices Java (à partir de Java 6) n'ont pas soutenu des génériques. Un de mes plus gros "WTF" lorsque j'ai commencé à programmer avec des génériques en Java. P>
Pourquoi ne faites-vous pas quelque chose comme ceci: (non générique) et faire une classe d'utilitaire pour implémenter les fonctions que vous avez effectuées dans Lorsque vous avez eu ceci dans Vous pouvez faire une classe d'utilité: p> < Pré> xxx pré> p> a a code>: p>
neuf a [] [] code> et le jeter à a
class A<T>
{
T s;
public A(T t)
{
s = t;
}
public String getType()
{
return s.getClass().toString();
}
public T getThing()
{
return s;
}
}
public static void main(String[] args)
{
A<?>[][] a = new A<?>[2][3];
a[0][1] = new A<String>("hi");
System.out.println(a[0][1].getType());
System.out.println(a[0][1].getThing());
A<String> b = (A<String>) a[0][1];
}
output:
class java.lang.String
hi
Vous voudrez peut-être regarder Stackoverflow.com/ Questions / 529085 / ... et Stackoverflow.com/Questions/ 3865946 / ... .
Quelle est votre raison d'insister sur des tableaux plutôt que d'autres types de collecte?
Vous jetez un objet [] [] à une [] [], les 2 ne sont pas compatibles.
@Gareth McCaughan - Les tableaux sont plus faciles à indexer que les listes.
Array [i] [J] [J] code> est plus lisible quearray.get (i) .get (j) code>. Lorsque vous codez un algorithme complexe, cela est vraiment utile.