使用Java中的泛型,有人能解释一下我';我做错了
我有一节这样的课使用Java中的泛型,有人能解释一下我';我做错了,java,generics,Java,Generics,我有一节这样的课 public interface Handler<T> { /** * @param request * @return * @throws ServiceErrorResponse */ public Credit handle(T request) throws ServiceErrorResponse; public Data handle() throws ServiceErrorResp
public interface Handler<T> {
/**
* @param request
* @return
* @throws ServiceErrorResponse
*/
public Credit handle(T request) throws ServiceErrorResponse;
public Data handle() throws ServiceErrorResponse;
}
但是,这会引发一个错误,因为它无法解析符号T。我尝试过多种方法,例如将其作为签名,但它也不起作用
public class DataHandlerImpl implements Handler<T> {
这不起作用,因为我必须实现handle(t)
但似乎对泛型有着根本性的误解。有人能解释一下吗
我希望这个“handle”方法能够接受字符串或整数。您需要决定希望
handle(…)
采用什么类型作为处理程序
类型。对于字符串
示例:
公共静态类DataHandlerImpl实现处理程序{
@凌驾
公共信用句柄(字符串请求){
返回新的CreditPolicy();
}
@凌驾
公共数据句柄(){
返回新的CreditPolicysData();
}
}
您需要决定您想要的句柄(…)
类型,将其作为处理程序
类型应用。对于字符串
示例:
公共静态类DataHandlerImpl实现处理程序{
@凌驾
公共信用句柄(字符串请求){
返回新的CreditPolicy();
}
@凌驾
公共数据句柄(){
返回新的CreditPolicysData();
}
}
假设该方法的植入将不同,以处理不同的类型,那么不能让同一个方法同时接受字符串和整数。对于泛型,当您编写实现类时,需要指定将使用哪个参数。您的编译器实际上应该给您一个警告,提醒您有没有类型的实现
public class DataHandlerStringImpl implements Handler<String>
public class DataHandlerIntegermpl implements Handler<Integer>
您不能让同一个方法同时接受字符串和int,假设该方法的植入将不同,以处理不同的类型。对于泛型,当您编写实现类时,需要指定将使用哪个参数。您的编译器实际上应该给您一个警告,提醒您有没有类型的实现
public class DataHandlerStringImpl implements Handler<String>
public class DataHandlerIntegermpl implements Handler<Integer>
我明白了,这意味着我不能在这里传递字符串或Int?您有几个选项:1)使用普通类型的
Integer
和String
;这是对象
,因此不需要泛型。2) 创建一个包含int
和String
的类型。3) 让Handler
使用2种泛型
和两种方法handleT(T)
和handleU(U)
@sf8193让人深思:如果方法可以采用字符串或整数,那么该方法的实现会是什么样子?如果您不知道args的类型,您可以在args上使用哪些方法?你不能将它乘以5(好像它是一个int),因为它可能是一个字符串;你不能得到它的长度(好像它是一个字符串),因为它可能是一个int。Java的类型系统不允许你说“type a或B”,所以arg必须是Object——它可以是任何东西,而不仅仅是String或int。你要求的是合理的,但它不适合Java的类型系统。:)我明白了,这意味着我不能在这里传递字符串或Int?您有几个选项:1)使用普通类型的Integer
和String
;这是对象
,因此不需要泛型。2) 创建一个包含int
和String
的类型。3) 让Handler
使用2种泛型
和两种方法handleT(T)
和handleU(U)
@sf8193让人深思:如果方法可以采用字符串或整数,那么该方法的实现会是什么样子?如果您不知道args的类型,您可以在args上使用哪些方法?你不能将它乘以5(好像它是一个int),因为它可能是一个字符串;你不能得到它的长度(好像它是一个字符串),因为它可能是一个int。Java的类型系统不允许你说“type a或B”,所以arg必须是Object——它可以是任何东西,而不仅仅是String或int。你要求的是合理的,但它不适合Java的类型系统。:)
public class DataHandlerStringImpl implements Handler<String>
public class DataHandlerIntegermpl implements Handler<Integer>
public Credit handle(String request)
public Credit handle(int request)