gpt4 book ai didi

java - 从 Java 中的两个方法抽象代码,也许使用委托(delegate)?

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

我有两个方法基本上做同样的事情,只是类型不同。我想将此功能抽象为一些通用方法,我认为我可以在 C# 中使用委托(delegate)轻松完成此操作,但我不知道 Java 中的等价物。我在这里只展示了其中的两种方法,但还有几种(比如八种)不同的 makeWhateverRequest 风格的方法。这是我的方法:

public State makeGetRequest(User user, String name) {
Get request = Builder.getGetRequest(user, name);
GetResponse response = service.get(request);
return ResponseTypeFactory.getResponseType(response);
}

public State makePutRequest(User user, String name) {
Put request = Builder.getPutRequest(user, name);
PutResponse response = service.put(request);
return ResponseTypeFactory.getResponseType(response);
}

如果可能有一些类似委托(delegate)的东西需要一个 User 和一个 String(就像在每个方法的第一行中一样),那么那一行可抽象为通用方法。但是,请注意,第一行返回了一个不同的值(即 GetPut 的实例)并且该值在第二行中使用。每个方法的最后一行已经相同,并使用多态性来确定要调用哪个版本的 getResponseType,这样就可以了。

一个困难是每个方法的第二行,我需要在其中调用不同的方法。也许我可以有一些GetPut 实现的接口(interface),然后需要一个类似委托(delegate)的东西来获取该接口(interface)的一个实例。那么也许 GetResponsePutResponse 都可以实现不同的接口(interface),我可以确保有一个 getResponseType 接受该接口(interface)的实例。

GetPut 继承自一个公共(public)基类 RequestGetResponsePutResponse 继承自一个公共(public)基类 Response。我可能可以将这些基类抽象化,然后,我可以只使用采用必要的抽象基类实例的方法,而不是使用不同的接口(interface)。

我对 Java 不是很熟悉,所以我不知道用 C# 做事的等效方法。感谢您的帮助。

编辑:以下是我对可能需要哪些接口(interface)的想法:

IRequest              IResponse
| \ | \
Get Put GetResponse PutResponse

然后我需要这些方法:

Builder.getRequest(User, String)
=> IRequest

service.getPut(IRequest)
=> IResponse

ResponseTypeFactory.getResponseType(IResponse)
=> State

最佳答案

我认为 Java 中没有改进现有内容的好方法。你可以用接口(interface)做一些事情,但它会更冗长。如果你的方法真的只有 3 行,我会坚持你所拥有的。代码清晰,重复最少。

关于java - 从 Java 中的两个方法抽象代码,也许使用委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1993616/

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