Java génériques des types incompatibles (non instance(s) de type variable(s) T exist)

Qui est en fait mon premier contact avec Java les types génériques et je n'arrive pas à comprendre quel est le problème avec le morceau de code suivant.

J'ai une classe helper Helper avec une fonction statique inRange en utilisant le type générique qui doit renvoyer la liste des objets à partir d'une entrée de la liste qui sont dans certains range autour de l'objet à l'index index (je n'ai pas encore testé, c'est pas un problème si elle fonctionne correctement ou pas):

public class Helper {
public static <T> List<T> inRange(List<T> list, int index, int range) {
    List<T> res = new ArrayList<T>();
    int N = list.size();
    assert(index < N);
    if (N == 0)
        return res;
    int i, j;

    /* right range */
    i = (index + 1) % N;
    j = 0;
    while (i != index && j < range) {
        res.add(list.get(i));
        i = (i + 1) % N;
        j++;
    }

    /* left range */
    i = (N + index - 1) % N;
    j = 0;
    while (i != index && j < range && !res.contains(list.get(i))) {
        res.add(lista.get(i));
        i = (N + i - 1) % N;
        j++;
    }

    return res;
}
}

Puis je veux l'utiliser dans une classe:

import java.util.ArrayList;

public class StrategyA extends StrategyB {
public Decision makeDecision(GameView gameView, Action action, View playerView) {
    int pos = gameView.activePlayersViews().indexOf(playerView);
    assert(pos != -1);

    ArrayList<View> inRange = Helper.inRange(gameView.activePlayersViews(), pos, 
            playerView.range());
    //todo ...
    return new Decision(Decision.KindOfDecision.DO_NOTHING, 0);

}
}

gameView.activePlayersView() est de type ArrayList<View>.

Puis, à partir de mon IDE (IntelliJ IDEA) sur la ligne d'appel inRange(..) - je obtenir

Error:(8, 56) java: incompatible types: no instance(s) of type variable(s) T exist so that java.util.List<T> conforms to java.util.ArrayList<View>

Même-je changer de type générique T directement à View j'obtiens toujours cette erreur

inRange retourne List, pas ArrayList
Pour commencer inRange retourne un List et que vous essayez d'assigner à ArrayList. Ce n'est pas possible, même si je m'attends à une erreur différente.

OriginalL'auteur micsza | 2017-05-15