簡體   English   中英

在 Java 中使用 generics,有人可以解釋我做錯了什么

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

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