gpt4 book ai didi

c# - Java 泛型作为参数

转载 作者:行者123 更新时间:2023-11-29 05:50:02 25 4
gpt4 key购买 nike

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

当前:

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);
}

我想做的是:

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);
}

我认为这在 C# 中是可能的,但我只想知道如何在 Java 中正确地做到这一点。

编辑:为清楚起见。

最佳答案

您应该能够编写以下内容:

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

请注意,调用者必须实例化并传入 response,因为类似 new S() 的东西在 Java 中是不可能的:

public void method(ARequest request, ADelegate delegate) {
serviceCall(request, new AResponse(), delegate);
}

有点像

MyClass.<ARequest, AResponse>serviceCall(request, new AResponse(), delegate)

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

关于c# - Java 泛型作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14268448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com