Le code suivant donne une erreur "création de tableau générique". Je me demande pourquoi c'est, car la classe est-ce parce que la classe interne a toujours accès aux types génériques, même s'il n'utilise aucun? C'est le meilleur que je puisse trouver, bien que si c'était le cas, je ne comprends pas pourquoi Java ne pouvait pas regarder et la voir ne fait aucune utilisation de types génériques et n'est donc pas une classe générique? P> Et oui, j'ai vu beaucoup de threads sur les tableaux de type générique, mais non, je n'ai trouvé personne en ce qui concerne les classes intérieures. P> p> entrée code> n'est pas une classe générique et n'a aucun objet de type générique. p>
3 Réponses :
Le type est en réalité testclass private static class Entry {
public Entry() {
}
}
... Parfait, a du sens :) Merci, va marquer comme correct quand il me laisse.
C'est à propos de ce que les JLS parlent de l'expression de création de tableau: JLS 15.10.1 : P> C'est une erreur de compilation si le JLS 4.7 : p> Un type est réifiable si et seulement si l'une des suivantes contient: p>
il fait référence à une déclaration de type de classe ou d'interface non générique. strong> p> li>
C'est un type paramétré dans lequel tous les arguments de type sont sans bornes
Wildcards (§4.5.1). P> LI>
C'est un type brut (§4.8). P> Li>
C'est un type primitif (§4.2). P> Li>
Il s'agit d'un type de tableau (§10.1) dont le type d'élément est réifiable. P> li>
ul>
blockQuote> p>
classorInterfaceType code> ne dénote pas
un type classorInterfaceType code> peut nommer
tout type de référence nommé, même un type de classe abstraite (§8.1.1.1) ou un
Type d'interface. P>
BlockQuote>
Habituellement, la solution de contournement de la création de tableaux d'un type paramétré est de créer une matrice du type brut, c'est-à-dire ou alternativement avec le type wildcard-paramétrice: p > entrée code> est une classe intérieure non statique. Cela signifie que c'est dans la portée des paramètres génériques de la classe externe. Chaque fois que vous écrivez simplement une entrée non qualifiée code> intérieure testclass code>, cela signifie implicitement testclass nouvelle arraylist neuf ArrayList [5] CODE> ou un tableau du type Wildcard-paramétrice, c'est-à-dire Nouvelle ArrayList > [5] code>. Mais dans ce cas, quel est le type brut? La réponse est que vous devez explicitement qualifier entrée code> avec le type de classe externe brut: p> entry = (Entry[])new TestClass<?>.Entry[10];