Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java中的泛型,有人能解释一下我';我做错了_Java_Generics - Fatal编程技术网

使用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)