简单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();
}