泛型java模板如何显式指定在已命名的类上使用参数变量?
public abstract class InterruptableEvaluator<State> {
public abstract evaluate(State state);
public abstract haltEvaluation();
private final class EvaluationThread extends Thread {
private State state;
public EvaluationThread(State state) {
this.state = state;
}
@Override
public void run() {
evaluate(state);
haltEvaluation();
}
}
}
问题在于:
@Override
public void run() {
evaluate(state);
haltEvaluation();
}
对象state
被视为java.lang.Thread.State
对象,而不是使用InterruptableEvaluator
中的参数
如何明确地告诉Java使用参数变量而不是java.lang.Thread.State
# 1 楼答案
为了简洁起见,泛型通常包含类型参数的单个字母,这是因为缺少使用单个字母命名的真正类。将
State
更改为S
或任何其他有效的类型名称,该名称不是参数中现有的类/接口,并且在使用该名称的任何地方都可以,这样就可以了