gpt4 book ai didi

java - 如果具有相同接口(interface)的类具有相似但不同的方法签名怎么办?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:12:54 25 4
gpt4 key购买 nike

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

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

在我的程序中,有几个计算器类,分别是ACostCalculatorBCostCalculator等。当调用 calculate() 方法来计算成本时,成本容器也会传递给那些成本计算器。在一个好的场景中,我可以为每个成本计算器制作一个 CostCalculator 接口(interface)。

但是,不同成本的计算需要不同的资源。在我当前的程序中,它就像:

//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() 方法概括为 into

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

关于java - 如果具有相同接口(interface)的类具有相似但不同的方法签名怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31760780/

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