簡體   English   中英

使用泛型限制傳遞給參數的類的類型,而無需強制轉換

[英]Restrict type of class passed to parameter using generics without casting

假設我有一個能夠將某種格式的字符串轉換為指定類的對象的實現...

public interface Translator {
    <T> T convertToObject(Class<T> clazz, String msg);
}

我有一個使用它的類,如下所示:

public <T> T proccessMessage(Class<? extends Response> responseCls,String msg) {
    return (T) translator.convertToObject(responseCls, msg); 
}

有沒有辦法做到這一點而無需鑄造? 我的意圖是將processMessage限制為僅接受Response類型。 響應類型是標記接口。 謝謝!

您必須對作為參數傳遞給翻譯器的類和返回的類型使用相同的類型,因為這是在接口中定義的方式:

public <T extends Response> T proccessMessage(Class<T> responseCls,String msg) {
    return translator.convertToObject(responseCls, msg); 
}

由於您將class參數限制為Response的子類,因此我相信您的方法簽名應如下所示:

public <T extends Response>
    T proccessMessage(Class<? extends T> responseCls, String msg)
{
    return translator.convertToObject(responseCls, msg);
}

這樣,您將獲得正確的返回類型,並且無需進行類型轉換即可進行編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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