gpt4 book ai didi

java - Java中如何在多个实现类中使用双接口(interface)?

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

所以假设我定义了以下内容:

public interface IExportTool {
void export(IReport iReport);
}

然后尝试使用它:

public class KibanaExporter implements IExportTool{

public void export(IReport kibana) {
kibana = (Kibana) kibana;
((Kibana) kibana).toJSON();
}
}

但是还有其他类也会再次做类似的事情:

public class MetricExporter implements IExportTool{

public void export(IReport metric) {
metric = (Metric) metric;
((Metric) metric).toJSON(); // might be something else here like toXML etc
}

请注意,Kibana 和 Metric 都在实现 IReport<KibanaRow>IReport<MetricRow>分别,而 IReport 界面如下所示:

public interface IReport<T> {
void addRow(T row);
}

我不喜欢所有这些转换,这感觉不对也不给我自动完成功能,所以有什么建议可以正确完成吗?

最佳答案

根据您发布的内容,很明显 KibanaMetric 都是 IReport 的子类型。

在这种情况下,您可以使接口(interface)通用:

interface IExportTool<R extends IReport> {
void export(R iReport);
}

然后以这种方式更改实现:

public class KibanaExporter implements IExportTool<Kibana>{

public void export(Kibana kibana) {
kibana.toJSON();
}
}

和:

public class MetricExporter implements IExportTool<Metric> {
public void export(Metric metric) {
metric.toJSON();
}
}

此版本允许编译器理解并验证只有 IReport 子类型的实例才会被传递给 export()。使用它的代码将由编译器验证,这样 MetricExporter().export() 只能用 MetricKibanaExporter() 类型的对象调用.export()Kibana 类型的对象。
这样,就不再需要类型转换了。

关于java - Java中如何在多个实现类中使用双接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50993957/

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