2011-10-01 12 views
1

J'utilise des génériques dans une certaine structure de données. Je dois stocker int x, int y, et Value value, où value est le type générique.Génériques & Types

Je suis en train de regrouper tous ceux qui dans un objet appelé NodeData puis dans une autre classe, créer un ArrayList de NodeData « s, (de sorte que chaque élément de la liste de tableau comprendra tenir un x, y et valeur.

Mon NodeData est la suivante:

public class NodeData<Value> { 

    private int x; 
    private int y; 
    private Value value; 

Dans une autre classe, la liste de tableau instancié comme suit:. ArrayList<NodeData> items = new ArrayList<NodeData>();

Je reçois une erreur pour l'un liste rray qui dit: NodeData is a raw type. References to NodeData<Value> should be parametrized. Pourquoi est-ce? NodeData est déjà paramétré comme NodeData<Value>.

Merci

+0

quand vous faites NodeData on suppose que vous substituerait une classe réelle pour la valeur. La façon dont vous l'avez défini Valeur peut être de n'importe quel type ce qui n'est probablement pas ce que vous voulez. – MeBigFatGuy

+0

Vous n'obtenez pas d'erreur mais plutôt un avertissement ***, et c'est une grande différence. Ce que vous faites n'est pas sûr, mais peut potentiellement fonctionner si vous en prenez soin. Je vous conseille de suivre le conseil de Duffymo, car c'est ce que les génériques sont pour - permettre la vérification de type de temps de compilation. –

Répondre

4

pas dans votre déclaration de tableau. Essayez comme ceci:

List<NodeData<Foo>> list = new ArrayList<NodeData<Foo>>(); 

Foo est le type Value vous voulez pour cette instance.

2

Dans l'autre classe, vous devrez spécifier le type vous avez l'intention d'utiliser à la place du type générique Value

par exemple.

ArrayList<NodeData<String>> items = new ArrayList<NodeData<String>>();. 
+0

Ne fonctionne pas. Il dit 'Non-concordance liée: Le type Valeur n'est pas un substitut valide pour le paramètre borné > du type NodeData 'Pourquoi est-ce? Je ne comprends pas – darksky

+0

@Nayefc J'avais manqué un '>' à la fin. C'est corrigé maintenant. –

+0

Ce n'était pas le problème que je n'ai pas copié et collé, je l'ai ajouté moi-même. Il a juste disparu tout seul, il a peut-être fallu du temps pour que mon EDI s'en rende compte. Fonctionne maintenant merci. – darksky