2010-09-08 4 views
2

J'ai créé un TreeMap comme ceci:hiérarchie d'objets java, et les objets qui passent à des fonctions

TreeMap<Integer, ArrayList<MyClass>> wrap = new TreeMap<Integer, ArrayList<MyClass>>(); 

J'ai créé un constructeur comme ceci:

public foo (TreeMap<Integer, Collection<Spot> > objects) { 
    this.field = objects; 
} 

Cependant, éclipse me donne un Squigly rouge quand j'utilise le constructeur, avec ma variable wrap comme paramètre unique:

The constructor foo(TreeMap<Integer,ArrayList<Spot>>) is undefined 

un ArrayList est une ty pe de Collection ... oui? Alors pourquoi ça ne marche pas?

Répondre

2

Les génériques ne fonctionnent pas comme vous le pensez dans ce cas.

Qu'est-ce que vous avez besoin est quelque chose de similaire à:

public foo (TreeMap<Integer, ? extends Collection<Spot> > objects) { 
    this.field = objects; 
} 

Le ? est appelé une wild card. Il vous permettra de passer un Collection, ou tout ce qui étend/implémente Collection.

La ligne ? extends Collection<Spot> se lit comme:

Quelque chose qui étend une collection.