[英]Bound mismatch in Java for generic method
我不明白為什么會出現此編譯錯誤
邊界不匹配:
Resource
類型的通用方法element(T)
不適用於參數(Class<Chassis>
)。 推斷的類型Class<Chassis>
不是有效的替代邊界參數<T extends Resource>
。
使用以下代碼:
public class Resource {
protected abstract class has<T extends Resource> {
public has(T v) {}
}
protected <T extends Resource> has element(T v) {
return new has<T>(v) {};
}
}
class Car extends Resource {
has chassis = element(Chassis.class);
}
class Chassis extends Resource {
}
為什么這無效? Chassis
擴展Resource
,為什么不匹配<T extends Resource>
?
我如何約束element()方法來接受Resource類對象或任何Resource子類對象作為參數?
Chassis.class
是java.lang.Class
的實例,該實例僅擴展java.lang.Object
。
<T extends Resource>
期望Resource
(或其子類之一)的實際實例。
為了解決這個問題,您可以將方法聲明更改為以下內容:
protected <T extends Resource> has element(Class<T> v) {
return new has<T>(v) {};
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.