Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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
C# Java泛型作为参数_C#_Java_Generics - Fatal编程技术网

C# Java泛型作为参数

C# Java泛型作为参数,c#,java,generics,C#,Java,Generics,所以我有很多方法,它们基本上进行相同的调用,唯一的区别是泛型的类名。例如: 当前: public void methodA(ARequest request, ADelegate delegate) { JsonClient<ARequest, AResponse> client = new JsonClient<ARequest, AResponse>(request.ServiceServerUrl, request, new AResponse());

所以我有很多方法,它们基本上进行相同的调用,唯一的区别是泛型的类名。例如:

当前:

public void methodA(ARequest request, ADelegate delegate)
{
     JsonClient<ARequest, AResponse> client = new JsonClient<ARequest, AResponse>(request.ServiceServerUrl, request, new AResponse());
     client.sendRequest(delegate);
}

public void methodB(BRequest request, BDelegate delegate)
{
         JsonClient<BRequest, BResponse> client = new JsonClient<BRequest, BResponse>(request.ServiceServerUrl, request, new BResponse());
         client.sendRequest(delegate);
}
public void方法A(请求、委派代表)
{
JsonClient client=newjsonclient(request.ServiceServerUrl,request,newaresponse());
客户端发送请求(委托);
}
公共无效方法B(B请求、B委派)
{
JsonClient client=newjsonclient(request.ServiceServerUrl,request,new breresponse());
客户端发送请求(委托);
}
我想做的是:

private void serviceCall<R extends RequestBase, S extends ResponseBase>(ADelegate delegate)
{
    JsonClient<R, S> client = new JsonClient<R, S>(request.ServiceServerUrl, request, new AResponse());
    client.sendRequest(delegate);
}

public void methodA(ARequest request, ADelegate delegate)
{
    serviceCall<ARequest, AResponse>(delegate);
}

public void methodB(BRequest request, BDelegate delegate)
{
    serviceCall<BRequest, BResponse>(delegate);
}
private void serviceCall(ADelegate委托)
{
JsonClient client=newjsonclient(request.ServiceServerUrl,request,newaresponse());
客户端发送请求(委托);
}
公共无效方法A(请求、授权代表)
{
服务呼叫(代表);
}
公共无效方法B(B请求、B委派)
{
服务呼叫(代表);
}
我认为这在C中是可能的,但我只想知道如何在Java中正确地做到这一点

编辑:为了清楚起见。

你的意思是

public <T extends RequestBase, E extends ResponseBase> void method(T request, E delegate)
{
     JsonClient<T, E> client = new JsonClient<T, E>(request.ServiceServerUrl, request, new AResponse());
     client.sendRequest(delegate);
}
公共作废方法(T请求,E委托)
{
JsonClient client=newjsonclient(request.ServiceServerUrl,request,newaresponse());
客户端发送请求(委托);
}

并像调用
ClassName.method(请求、响应)
那样调用它,您应该能够编写以下内容:

private void服务调用(
R请求,
政府的回应,,
大使代表
) {
JsonClient=newJSONClient(request.ServiceServerUrl,request,response);
客户端发送请求(委托);
}
请注意,调用方必须实例化并传入
response
,因为类似
news()
的内容在Java中是不可能的:

公共作废方法(请求、授权委托){
serviceCall(请求、新AresResponse()、委托);
}
差不多

MyClass.serviceCall(请求、新AresResponse()、委托)

这里不需要,因为编译器会为您推断类型参数。

不理解您真正想要的是什么。方法无效,并且在参数中未使用泛型。。你到底想要什么,伙计?是的,我想现在还不清楚。我有几个扩展RequestBase的类。其中之一是一个任务。我在类“method”中有几个方法,它们将不同的子类(如ARequest和ADelegate)作为参数。所以我只是想清理一下我的代码,尽量减少剪切和粘贴。为了清晰起见,我将进行编辑。可能类似于
void方法(T请求,ADelegate委托)
我认为
委托
不会是
E
。。。这就是响应类型。现在,
serviceCall
总是采用
ADelegate
。您可以添加第三个类型参数
D extends DelegateBase
,如果希望完全泛化参数,则可以使用它。