简单java类型推断失败
我有一个通用接口简单java类型推断失败,java,generics,types,inference,Java,Generics,Types,Inference,我有一个通用接口ExternalState和一个实现它的类: public class MockState<T extends Comparable<T>> implements ExternalState<T> { } 使用lunarocultationstates作为lunarocultationstate的List,类型推断失败。 我很难理解的是,以下方法(没有列表)中的类型推断是有效的: public StateConstraintExpressio
ExternalState
和一个实现它的类:
public class MockState<T extends Comparable<T>> implements ExternalState<T> {
}
使用lunarocultationstates
作为lunarocultationstate
的List
,类型推断失败。
我很难理解的是,以下方法(没有列表)中的类型推断是有效的:
public StateConstraintExpression.Builder equal(外部状态,T值){
StateConstraintEqual sce=StateConstraintExpression.buildEqualConstraint(状态,值);
this.constraints.add(新状态constraintExpression(sce));
返回getThis();
}
有人能解释一下吗?你似乎认为
List
是一种List
。事实并非如此。看看原因
你能做的就是接受一个
列表我学到了一些东西,谢谢你。
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 )
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();
}
public <T extends Comparable<T>> StateConstraintExpression.Builder equal(List<? extends ExternalState<T>> states, T value) {
for(var state : states){
StateConstraintEqual<T> sce = StateConstraintExpression.buildEqualConstraint(state, value);
this.constraints.add(new StateConstraintExpression(sce));
}
return getThis();
}