我有一个通用接口 ExternalState<T>
以及一个实现它的类:
public class MockState<T extends Comparable<T>> implements ExternalState<T> {
}
然后,我有一个类扩展了这个实现:
public class LunarOccultationState extends MockState<Boolean> {
...
}
我有以下通用方法:
public <T extends Comparable<T>> StateConstraintExpression.Builder equal(List<ExternalState<T>> states, T value) {
for(var state : states){
StateConstraintEqual<T> sce = StateConstraintExpression.buildEqualConstraint(state, value);
this.constraints.add(new StateConstraintExpression(sce));
}
}
return getThis();
}
但当我尝试调用此方法时:
equal( lunarOccultationStates, false )
与 lunarOccultationStates
作为 List
的 LunarOccultationState
,类型推断失败。我很难理解的是,以下方法(没有列表)中的类型推断是有效的:
public <T extends Comparable<T>> StateConstraintExpression.Builder equal(ExternalState<T> state, T value) {
StateConstraintEqual<T> sce = StateConstraintExpression.buildEqualConstraint(state, value);
this.constraints.add(new StateConstraintExpression(sce));
return getThis();
}
有人能解释一下吗?
1条答案
按热度按时间vojdkbi01#
你好像觉得
List<LunarOccultationState>
是一种List<ExternalState<T>>
. 事实并非如此。请看这篇文章了解原因。你能做的就是接受
List<? extends ExternalState<T>>
相反。这种类型的列表不允许您向其中添加内容,这是List<LunarOccultationState>
不是一种List<ExternalState<T>>
. 但是你没有在列表中添加任何内容,所以没关系。