Salut à toutes et à tous

En pleine création d'un petit logiciel de gestion de comptes, je suis confronté à un problème qui me parait un peu stupide... Soit je m'y prends mal, soit java peut être amélioré.

Situons le contexte:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
package org.aspyct.mpc.accounting;
 
public interface Movement {
   ...
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
package org.aspyct.mpc.accounting;
 
class MovementImpl implements Movement {
    ...
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
package org.aspyct.mpc.accounting;
 
class AccountingImpl implements Accounting {
    private List<MovementImpl> movements;
 
    public Iterator<Movement> movements() {
        // La ligne suivante plante lamentablement, me disant "Incompatible types"
        return Collections.unmodifiableList(movements).iterator();
 
        // Pourtant, la suivante fonctionne, alors que c'est, en soi, la même histoire
        return new ArrayList<Movement>(movements).iterator();
    }
}
Alors... est-ce que je m'y prends comme un pied avec mes interfaces et mes listes, ou est-ce que vous trouvez aussi que c'est un comportement bizarre ?

Je conçois bien que la première ligne retournerait quelque chose du type Iterator<MovementImpl>, mais puisque de MovementImpl à Movement on effectue une généralisation, ça devrait passer quand même...