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