gpt4 book ai didi

java - 实现没有接口(interface)类型参数的接口(interface)

转载 作者:行者123 更新时间:2023-11-29 08:32:35 25 4
gpt4 key购买 nike

Apache Storm 有一个接口(interface) IBasicBolt使用未类型化的 map 。

//org.apache.storm.topology.IBasicBolt
public interface IBasicBolt extends IComponent {
void prepare(Map stormConf, TopologyContext context);
...
}

我想在我的抽象类中添加一个类型化的 Map,

public abstract class MyClass implements IBasicBolt {
@override
public void prepare(Map<String, Object> stormConf, TopologyContext context) {
}
}

有没有办法不添加 <String, Object> 来做到这一点?去 Storm 类?

最佳答案

Adapter pattern适用于这种情况,尽管在您的用例中可能不完全是您所追求的。但这是一种值得了解的模式,可能会引导您朝着正确的方向前进。

意图

将一个类的接口(interface)转换为客户期望的另一个接口(interface)。适配器让类可以协同工作,而这些类由于不兼容的接口(interface)而无法协同工作。

示例

因此请考虑目标接口(interface),即您希望编程到的接口(interface):

public interface IMyBasicBolt {    
void prepare(Map<String, Object> stormConf, String other);
}

(注意:为简单起见,我已将 TopologyContext 替换为 String)

然后您可以创建一个适配器类来实现您的目标接口(interface)并将行为(组合)委托(delegate)给 IBoltBasic 的实现。

public class BasicBoltAdapter implements IMyBasicBolt {

private IBasicBolt basicBolt;

public BasicBoltAdapter(IBasicBolt basicBolt) {
this.basicBolt = basicBolt;
}

@Override
public void prepare(Map<String, Object> stormConf, String other) {
basicBolt.prepare(stormConf, other);
}

}

适配器 BasicBoltAdapter 的使用示例:

IBasicBolt basicBolt = new IBasicBolt() {

@Override
public void prepare(Map stormConf, String other) {
System.out.println(stormConf.toString() + " " + other);
}
};
Map<String, Object> map = new HashMap<>();
map.put("MapKeyTest", new Object());
IMyBasicBolt myBasicBolt = new BasicBoltAdapter(basicBolt);
myBasicBolt.prepare(map, "Test");

在您的情况下,严格来说并不需要接口(interface) IMyBasicBolt(您的目标接口(interface))。但通常最好在可能的情况下针对接口(interface)进行编程。

关于java - 实现没有接口(interface)类型参数的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46733136/

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