簡體   English   中英

當重載有界的泛型時,如何返回正確的類型?

[英]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很可能是LongFloatBigInteger ,都不是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM