gpt4 book ai didi

Java 泛型不兼容类型(不存在类型变量 T 的实例)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:12:46 26 4
gpt4 key购买 nike

这基本上是我第一次接触 Java 泛型类型,我无法弄清楚以下代码有什么问题。

我有一个助手类 Helper具有静态功能 inRange使用通用类型,它应该从输入列表中返回对象列表,这些对象位于某些 range 中围绕索引 index 处的对象(我还没有测试过,能不能用不是问题):

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;
}
}

然后我想在类里面使用它:

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()类型为 ArrayList<View> .

然后从我的 IDE (IntelliJ IDEA) 在线调用 inRange(..)我明白了

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>

即使我更改通用类型 T直接到View我仍然收到此错误

最佳答案

ArrayListList 接口(interface)的实现。
所以所有 ArrayList 实例都是 List 实例,但所有 List 实例不一定都是 ArrayList

所以当你调用这个方法时:

public static <T> List<T> inRange(List<T> list, int index, int range) {

您不能像现在这样将其结果分配给 ArrayList:

ArrayList<View> inRange = Helper.inRange(...);

继续按接口(interface)编程,两边使用List:

List<View> inRange = Helper.inRange(...);

关于Java 泛型不兼容类型(不存在类型变量 T 的实例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43976960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com