Java,在两个不同的通用实例之间进行转换

时间:2017-08-14 14:51:06

标签: java generics

我想创建一个适配器接口(和实现)来使用多个类似的外部库。

例如,有外部库的接口。这些库指导实现Converter并注册它以扩展功能。

Lib A

public interface AConverter<S, D> {
    D convert(S source);
}

Lib B

public interface BConverter<S, D> {
  D convert(S source);
}

两个接口都指定相同的方法。

我想要的是使用我自己的MyConverter界面。

public interface MyConverter<S, D> {
  D convert(S source);
}

用户实现此类,我的库将实现转换为LibA的AConverter实现或LibB的BConverter实现。这可能吗?

编辑:

我不想要工厂模式或扩展LibA接口和LibB接口。 MyConverter是核心库,LibA和LibB是外部可插拔库。

我正在尝试的是,

public ALibAdapter {
    AConverter change(MyConverter convert) {
        /**
         * Anything I can do?
         */
        return aConverter;
    }
}

1 个答案:

答案 0 :(得分:0)

您的界面可以扩展现有界面:

public interface MyConverter<S, D> extends AConverter<S, D>, BConverter<S, D> {
  ...
}

您现在可以使用它代替其中一个库接口。

如果所有方法都具有相同的名称(convert),则可以覆盖它们。否则,您必须确保使用Java 8默认方法实现从您自己的方法调用这些实现。