gpt4 book ai didi

Java 泛型 : how to remove reduntant parameter

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:34:04 25 4
gpt4 key购买 nike

请帮我处理这个情况。

我有一个抽象类BasicCommand:

public abstract class BasicCommand<RequestT, ResponseT> {
protected Collection<ResponseT> execute(RequestT request) {
return Something;
}
}

我有一个包含两个对象的类 RequestContext:

public class RequestContext<RequestT> {

private RequestT requestT;
private HttpRequest httpRequest;
}

现在,我想扩展我的 BasicCommand,它的请求是参数化的 RequestContext,响应是参数化的 ResponseT:

public abstract class Command<RequestContext<RequestT>, ResponseT> extends BasicCommand {
@Override
public Collection<ResponseT> execute(RequestContext<RequestT> request) {
return something();
}
}

我知道这段代码无法编译。

经过多次尝试,最终我想到了这个:

public abstract class Command<T extends RequestContext<RequestT>, RequestT, ResponseT>
extends BasicCommand<RequestContext<RequestT>, ResponseT> {
}

如您所见,参数 RequestT 是重复的。

看看这个命令的具体实现:

public class SpecificCommand extends Command<RequestContext<String>, String, String> {
}

多余的参数真的很烦人。如何更改命令 的签名以使其正确?BasicCommand 已给出(我无法更改它)。谢谢!

最佳答案

您不需要参数 T。你没有使用它。

尝试:

public abstract class Command<RequestT, ResponseT> extends BasicCommand<RequestContext<RequestT>, ResponseT> {
@Override
public Collection<ResponseT> execute(RequestContext<RequestT> request) {
...
}
}

和:

public class SpecificCommand extends Command<String, String> {
}

关于Java 泛型 : how to remove reduntant parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47011902/

25 4 0