【问题标题】:Java, convert between two different generic instancesJava,在两个不同的泛型实例之间转换
【发布时间】:2017-08-15 12:04:25
【问题描述】:

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

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

库 A

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

库 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;
    }
}

【问题讨论】:

    标签: java generics


    【解决方案1】:

    您的接口可以扩展现有接口:

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

    您现在可以使用它代替任一库接口。

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

    【讨论】:

    • 谢谢,但我不想在 Converter 接口中依赖 make 和 lib。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 2018-12-06
    • 2011-06-09
    • 1970-01-01
    相关资源
    最近更新 更多