[英]Using generics in Java, can someone please explain what I'm doing wrong
我有一個像這樣的 class
public interface Handler<T> {
/**
* @param request
* @return
* @throws ServiceErrorResponse
*/
public Credit handle(T request) throws ServiceErrorResponse;
public Data handle() throws ServiceErrorResponse;
}
它是由這個實現的
public class DataHandlerImpl implements Handler {
public Credit handle(T request) {
return new Policy();
}
public Data handle() {
return new Data();
}
}
但是,這會引發錯誤,因為它無法解析符號 T。我嘗試了多種方法,例如將其作為簽名,但它也不起作用
public class DataHandlerImpl implements Handler<T> {
我也試過
public class DataHandlerImpl implements Handler {
public Policy handle(String request) {
return new Policy();
}
public Data handle() {
return new Data();
}
}
這不起作用,因為我必須實現handle(T)
但似乎對generics有一個根本的誤解。 有人可以解釋一下嗎?
我希望這個“句柄”方法能夠接受字符串或整數。
你不能讓同一個方法同時接受字符串和整數,假設方法的植入會不同以處理不同的類型。 對於 generics,當您編寫實現 class 時,您需要指定它將采用哪個參數。 你的編譯器實際上應該給你一個沒有類型的實現的警告。
public class DataHandlerStringImpl implements Handler<String>
public class DataHandlerIntegermpl implements Handler<Integer>
執行此操作的非泛型方法將是重載方法,這些方法更簡單但可擴展性/功能較差。 編譯器將根據傳入的類型知道要使用哪個實現。
public Credit handle(String request)
public Credit handle(int request)
您需要決定您希望handle(...)
采用什么類型並將其應用為Handler<T>
類型。 對於String
示例:
public static class DataHandlerImpl implements Handler<String> {
@Override
public Credit handle(String request) {
return new CreditPolicy();
}
@Override
public Data handle() {
return new CreditPoliciesData();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.