如果具有相同接口的类具有相似但方法签名不同,该怎么办?

迈克尔·W

如果具有相同接口的类具有相似但方法签名不同,该怎么办?

假设我有一个项目来计算不同的成本(最后得到总成本)。

在我的程序中,有几个计算器类,即ACostCalculatorBCostCalculator等等。calculate()调用方法来计算成本时,成本容器也将传递给那些成本计算器。在一个好的情况下,我可以CostCalculator为每个成本计算器创建一个接口。

但是,针对不同成本的计算需要不同的资源。在我当前的程序中,它类似于:

//getResource() are costly method while several costs need this. So do it outside calculate() method.
ResourceA resourceA = getResourceA(); 
ResourceB resourceB = getResourceB();

CostContainer costContainer = new CostContainer();
CostCalculator aCostCalculator = new ACostCalculator();
...
CostCalculator eCostCalculator = new ECostCalculator();

aCostCalculator.calculate(costContainer);
bCostCalculator.calculate(costContainer)
cCostCalculator.calculate(costContainer, resourceA);
dCostCalculator.calculate(costContainer, resourceA);
eCostCalculator.calculate(costContainer, resourceA, resourceB);

如果签名完全相同,我可以方便地循环执行一次。但是,由于它们相似但又不同,所以我什至无法建立一个好的界面。

我不确定是否有好的方法。我能想到的是将所有calculate()方法推广

calculate(CostContainer costContainer, List<Object> resources);

有任何想法吗?谢谢回答。

莱斯曼纳

如果资源在计算器的整个生命周期中保持不变:请将资源传递给计算器的构造函数。

ResourceA resourceA = getResourceA(); 
ResourceB resourceB = getResourceB();

CostContainer costContainer = new CostContainer();

CostCalculator aCostCalculator = new ACostCalculator();
CostCalculator bCostCalculator = new BCostCalculator();
CostCalculator cCostCalculator = new CCostCalculator(resourceA);
CostCalculator dCostCalculator = new DCostCalculator(resourceA);
CostCalculator eCostCalculator = new ECostCalculator(resourceA, resourceB);

aCostCalculator.calculate(costContainer);
bCostCalculator.calculate(costContainer);
cCostCalculator.calculate(costContainer);
dCostCalculator.calculate(costContainer);
eCostCalculator.calculate(costContainer);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有相同签名但在两个接口不同的返回类型的方法

如何实现具有参数相同,但不同签名的方法

Java:扩展具有相同方法的类并实现接口

在Java类中实现了具有相同方法签名的两个接口

从几个具有相同方法签名的接口继承的类

接口具有相同的方法,但被认为是不同的

<tr>具有rowspan时该怎么办

该捆绑包当前具有锁定在3.2.12的导轨。该怎么办?

实现两个具有相同方法签名但返回类型不同的接口

C#协方差:具有不同接口签名的类

如果我没有在Azure服务总线中调用IMessageSession的CloseAsync和CompleteAsync方法,该怎么办?

出现TypeError错误:boxplot()的关键字参数'vert'具有多个值,我该怎么办?

Play商店说我的应用程序必须具有至少28的targetSDK。如果没有,该怎么办?

如果报表中有相同的UUID,该怎么办?

如果对象的实例没有引用该怎么办?

具有相同输入openssl的不同签名

Linux内核是否重复使用具有重复安装点的dentry结构?如果是这样,怎么办?

片段必须具有无参数的构造函数-如果我的片段需要参数怎么办?

具有相同签名但范围不同的C ++调用方法

使用类的方法更新类变量的实例是否正确?如果是,该怎么办?

Windows Defender网络保护组件确实具有攻击性,该怎么办?

如果没有上下文该怎么办?

具有相同inputChannel和不同签名的多个@ServiceActivator方法

Java类具有2个具有相同函数签名但返回类型不同的方法

C ++ Koenig(依赖于参数)查找:如果不同名称空间中的两个名称空间函数具有相同的参数类型怎么办?

多次实现相同的通用接口,该通用接口包含具有不同类型参数的属性

c ++类实现接口,接口具有采用实现该接口的任何类的方法

无法调用具有不同签名的基类方法

从具有 1:N 关系的字段中设置百里香叶的值。我该怎么办?