2010-10-04 4 views
3

J'essaie de créer un tableau de type générique. Je reçois l'erreur:Type de tableau dans les génériques

Pair<String, String>[] pairs; // no error here 

pairs = new Pair<String, String>[10]; // compile error here 

void method (Pair<String, String>[] pairs) // no error here. 

Je suis confus. Des indices sur pourquoi cela se passe.

+1

vous avez manqué 'new' Je pense que –

+0

Désolé, oublié nouvelle. La question est toujours valide. – fastcodejava

+1

pouvez-vous fournir un message d'erreur? – user132371

Répondre

9

La raison en est que vous ne pouvez pas créer de tableaux de types génériques ou paramétrés, seulement types réifiables (c'est-à-dire types pouvant être déduits lors de l'exécution).

Il est possible cependant de déclarer de tels types de tableau en tant que variables ou paramètres de méthode. C'est un peu illogique, mais c'est comme ça que Java est maintenant.

Java Generics and Collections traite ce et les questions liées largement au chapitre 6.

+0

Bonne réponse, pourriez-vous expliquer pourquoi ils l'ont fait? – javaguy

+1

@javaguy, je ne peux que spéculer :-) suite aux suppositions de JGaC. La raison possible était que les concepteurs voulaient rendre l'utilisation des tableaux plus pratique. Il aurait peut-être mieux valu éviter cela, et préfèrent rendre le système de type générique plus propre et plus sûr. Cela aurait rendu l'utilisation des tableaux plus gênante dans certaines situations, accélérant ainsi la transition vers de véritables collections pour de nombreux développeurs - ce qui ne serait pas une si mauvaise chose. –

6

Créer le tableau sans types génériques:

Pair<String, String>[] pairs = new Pair[10]; 

Le compilateur ne se plaindra pas et vous ne devez utiliser aucun @SuppressWarnings annotation.

+0

yup, pas besoin de ma complication. +1 – Bozho

1

Vous ne pouvez pas créer Tableau de type générique
Check generic Tutorial

+0

Je pense que ce lien est cassé –

1

Cette construction compile

import java.util.HashMap; 


public class Test { 
    class Pair<K,V> extends HashMap<K,V> { 
    } 

    public static void main(String[] args) { 
     Pair<String, String>[] pairs = new Pair[10]; 
    } 
}