【发布时间】:2018-04-21 20:27:40
【问题描述】:
首先,我查看了很多以前的帖子,包括:
Java Generics and generic types
Java generics incompatible type
Java Generics Incompatible Types
Java generics: incompatible types
他们都没有解决我遇到的问题。以下代码有些做作,但说明了问题。我使用的是 Java 1.8。
import java.util.List;
/**
* Created by aaron on 11/8/2017.
*/
public abstract class Selecter<STATE extends Selecter.State, ACTION> {
public abstract class State {
public abstract List<ACTION> getActions();
public abstract ACTION selectAction(List<ACTION> list, int selector);
}
public ACTION searchAction(STATE state, int selector) {
return state.selectAction(state.getActions(), selector);
}
}
现在,既然STATE 必须是Selector.State,并且getActions() 返回一个List<ACTION> 和selectAction() 从一个List<ACTION> 返回一个ACTION,为什么@987654333 中会出现类型不兼容的错误@?
我该如何解决?
编辑
我想我已经解决了:
import java.util.List;
/**
* Created by aaron on 11/8/2017.
*/
public abstract class Selecter<ACTION> {
public abstract class State<A> {
public abstract List<A> getActions();
public abstract A selectAction(List<A> list, int selector);
}
public ACTION searchAction(State<ACTION> state, int selector) {
return state.selectAction(state.getActions(), selector);
}
}
但是,我不知道为什么这个有效而另一个无效。
【问题讨论】:
-
State.selectAction(state.getActions(), 选择器)
-
“不兼容的类型”是什么意思?请在此处发布相关错误消息。同时显示
ACTION的定义 -
<STATE extends Selecter<STATE, ACTION>.State, ACTION>让它编译,但这太荒谬了。请找到另一种方法来为您的用例建模,无论它是什么。 -
错误是不兼容的类型:必需:找到的操作:Java.lang.Object
-
在您的第一个版本中,您不能简单地使用
State state,并完全删除STATE类型变量吗?
标签: java generics abstract-class inner-classes