繁体   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