2010-10-16 4 views
0

Je reçois une erreur dans la compilation:(java) types incompatibles?

'types incompatibles - mais l'unité trouvée unité attendue'

Pourquoi est-ce? C'est en revenant d'une méthode que je peux même analyser les données retournées en 'unité' et cela fonctionne bien, pourquoi cette erreur se produit-elle? Est-ce que le fait que j'utilise un itérateur dans une collection que j'ai créée a quelque chose à voir avec cela? Je n'ai pas quitté l'itérateur type E car je veux spécifiquement cette collection pour un type d'objet.

private class unitHashIterator<unit> implements Iterator<unit> { 
    private unitHash hash; 
    private int nextIndex; 
    private unitHashIterator(unitHash u) { 
    hash = u; nextIndex = 0; 
    } 
    public unit next() { 
    if(!hasNext()) 
     throw new NoSuchElementException(); 
    return hash.data[nextIndex++]; << HERE OCCURS THE ERROR 
    } 
} 

Cette classe est contenue dans une collection.

« types incompatibles - mais l'unité trouvée unité attendue »

+1

Il sera impossible de répondre sans voir le message d'erreur réel (ou ** messages **) et le code source réel mettant en évidence la ligne où l'erreur s'est produite. –

+0

private class unitHashIterator implémente l'itérateur { private unitHash hash; private int nextIndex; private unitHashIterator (unitéHash u) { hash = u; nextIndex = 0; } ... unité publique suivante() { si throw new NoSuchElementException() (de hasNext()!); return hash.data [suivantIndex ++]; << ICI OCCASION L'ERREUR } ... } Cette classe est contenue dans une collection. 'types incompatibles - unité trouvée mais unité attendue' – Alex

+0

'hash.data [index_suivi ++]' renvoie quoi exactement? Qu'est-ce que 'hash.data'? –

Répondre

2

Quelle que soit la définition de unitHash, il ne peut pas être garantie contiennent peut-être des éléments de l'unité de type, car unitHash n'est pas paramétrés sur les types mais unitHashIterator est. Je soupçonne que vous vouliez soit écrire class unitHashIterator plutôt que class unitHashIterator<unit>, ou private unitHash<unit> hash; plutôt que private unitHash<unit> hash;.

Le message d'erreur que vous obtenez est probablement parce que le compilateur attend de retourner quelque chose du même type que le type de variable unit, mais hash retours quelque chose d'un certain type de béton (pas de type variable) qui se trouve être également nommé unit .

+0

La modification de l'en-tête de classe l'a corrigé. Merci! – Alex

Questions connexes