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

标签 java interface delegates abstraction

我有两个方法基本上做同样的事情,只是类型不同。我想将此功能抽象为一些通用方法,我认为我可以在 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/

相关文章:

c# - "No Operation"C# 中的委托(delegate)

java - 无法在 Jena 库中创建用于从 RDF 解析或提取 URIS 的模型类?XML 页面

java - 制作 .jar 文件的 GUI

java - 使用泛型返回列表的接口(interface)会导致警告

c# - 使用 Moq 模拟 Delegate.Invoke() 在 LINQ 中抛出 InvalidCast 异常

使用通用 T 作为按钮的 C# 委托(delegate)

java - 如何从String中获取 "1.2"格式的字符串?

java.text.ParseException : Unparseable date: "01:19 PM" 异常

winforms - 使用依赖注入(inject)的分层解决方案的 Visual Studio 项目中的接口(interface)放置位置

oop - 在 Fortran 中定义和调用构造函数