[英]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.