gpt4 book ai didi

java - 泛型在 Java 中被忽略

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:47:02 28 4
gpt4 key购买 nike

所以我有这段 Java 代码:

public <A extends Action> List<A> getActionsFor(Actor a) {
List<A> theActions = super.getActionsFor(a);

for (Action ac: a.getItemCarried().getActions()) {
theActions.add(ac);
}

return theActions;
}

出于某种原因,javac 拒绝 .add(ac) 声称 add(A) 不能应用于 Action。

我是不是漏掉了一些关键的东西?我可以通过在两个包之间创建依赖关系来解决这个问题,但我真的不想这样做。

所有有问题的类都已正确导入,并且调用的每个方法都有效,所以我真的不知道为什么它不能接受 A 扩展的类类型。

任何建议,即使您不确定也将不胜感激,因为我必须在接下来的 6 小时内修复此问题,否则我将需要创建该依赖项。

最佳答案

Am I missing something key here?

A 是对 Action 的扩展,ac 也是对 Action 的扩展。不过这有点像设施

Yesterday I saw someone.
Someone is the President
Therefor, yesterday I was the President.

问题是编译器不知道 AActionAction 的兼容子类

一个简单的解决方法是不要那么具体。在此方法中使用 Action 而不是 A

public List<Action> getActionsFor(Actor a) {
// this has to return a copy of the List or you will be modifying an original
List<Action> theActions = super.getActionsFor(a);

for (Action ac: a.getItemCarried().getActions()) {
theActions.add(ac); // ac is an Action so all good.
}

return theActions;
}

或者你可以做你拥有的,但更复杂

public <A extends Action> List<A> getActionsFor(Actor<A> a) {
List<A> theActions = super.getActionsFor(a);

for (A ac: a.getItemCarried().getActions()) {
theActions.add(ac); // ac is an A, so all good.
}

return theActions;
}

关于java - 泛型在 Java 中被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23423226/

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