[英]Java Generics - Cannot override a method with an extends generic
我在服務AbstractClass中有此方法:
public <E extends EntityFilter> Specification<T> getSpecifications(E entityFilter) {
return null;
}
然后我也有一個EntityFilter的實現:
public class UserEvaluationFilter implements EntityFilter {
@Getter
@Setter
private String evaluator;
}
我想像這樣在我的serviceClass中覆蓋AbstractClass(它擴展了控制器AbstractClass)方法:
@Override
public Specification<UserEvaluation> getSpecifications(UserEvaluationFilter filter) {
return doStuff();
}
編譯器說這不會覆蓋我的AbstractClass的任何方法。
怎么了?
您在abstrct類中聲明的方法簽名表示該方法應接受EntityFilter
任何子類作為該參數。
實際上,類型變量在那里是多余的:您最好將其聲明為:
public Specification<T> getSpecification(EntityFilter entityFilter)
您要在子類中嘗試做的是使參數類型比EntityFilter
更具體; 但是Liskov替換原則禁止這樣做,該原則規定子類必須為:
因此,您試圖在子類中聲明的方法實際上不會覆蓋超類型中的方法,因此被禁止。
為了解決這個問題,您需要使過濾器類型成為類級別的類型變量:
class AbstractClass<T, E extends EntityFilter> {
public Specification<T> getSpecifications(E entityFilter) {
return null;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.