[英]When overloading bounded generics, how can I return the right type?
以下代碼給出了編譯錯誤。 我如何避免這種情況?
public class C<T> {
public T doStuff(T arg) {}
}
public class S<T extends Number> extends C<T> {
public T doStuff(T arg) {
return new Integer(0);
}
}
謝謝!
所以,因為當你說,這個聲明是非法的T
是某種 Number
,有沒有辦法明確強制要求T
具體為Integer
時刻。
public T doStuff(T arg) {
return new Integer(0);
}
T
很可能是Long
或Float
或BigInteger
,都不是Integer
。
幸運的是, Number
具有intValue()
方法,該方法使您可以從任何這些Number
類型中獲取一個int。 您可以改用:
public Integer doStuff(T arg) {
return new Integer(arg.intValue());
}
你將不得不改變你的方式doStuff
方法工作在父類,雖然, 向該方法引入新的類型參數。
public <S> S doStuff(S arg) {
return arg;
}
當然,這意味着doStuff
方法也doStuff
。 如果您真的想讓整個類的Number
保持界限,則必須讓您的類使用您關心的實際具體類型。
class S extends C<Integer> {
public Integer doStuff(Integer arg) {
return 0;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.