[英]Java generics: Bound mismatch: The type is not a valid substitute for the bounded parameter of the type
[英]Java generics , bound mismatch: The type is not a valid substitute for the bounded parameter
我有一個應該返回擴展BaseDto類的對象列表的類。
所以我寫了這個
public class Worker<T extends BaseDto> {
private T t;
ArrayList<T> getList() {
....
}
}
這是應該在列表中返回的對象
public class MyDTO extends BaseDto implements Serializable {
...
}
但是當我寫的時候:
Worker<MyDTO> q = new Worker<MyDTO>();
它不會編譯並顯示以下錯誤:
綁定不匹配:MyDTO類型不是Worker類型的有界參數的有效替代品
怎么了?
Worker<MyDTO> q = new Worker<MyDTO>(); // this is fine
您提供的代碼應該可以運行,我在這里嘗試過,並且可以正常編譯。
但是,此行無法在Java中編譯:
Worker<BaseDto> dto = q; // this is not
因為Java中的泛型類型是不變的 ,這意味着即使X或Y是彼此的子類型,兩種類型的List<X>
和List<Y>
是不兼容的。 在支持協方差的語言中,由於MyDTO是BaseDto的子類型,因此可以編譯此行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.