有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java同时支持公共接口API和内部具体API?

我已经设计了一个使用接口的完整API,客户机可以实现它来利用一些行为。在内部,我希望使用自己的实现类来使用更丰富的API。我希望这些实现继续符合基于接口的API,但Java对泛型的处理正在成为阻碍

以下是一个例子:

public interface PublicAPI {
    void doSomething(SomeType object);
}

public class SomeTypeImpl implements SomeType { }

public class InternalClass implements PublicAPI {
    public void doSomething(SomeTypeImpl object) {
        // ...
    }
}

在某些情况下,可以在公共api中使用通配符(如<T extends SomeType>)指定类型,但这会因泛型集合而导致方法冲突

所以我问你,有没有办法支持这种类型的设计(或者更好的设计),或者我注定要在我的内部类和公共API的实现之间来回转换

谢谢


更新

我更好地理解了为什么不可能执行比API提供的更具体的类型。一旦有人拥有你的对象的实例,它就可能被不太具体的类型“污染”

根据ACL的建议,我采取了在自己的特定包中使用内部类的方法,然后使用公共API接口创建它们的“视图”。创建视图后,对象将被标记为不纯对象,并且不能再保证对象属于接口以外的任何类型。在我自己的类中,当处理不纯对象时,我抛出异常(因为这意味着允许引用过早泄漏)

我将把这个问题留待进一步研究


共 (1) 个答案

  1. # 1 楼答案

    为什么不将界面泛化?比如:

    public interface PublicAPI<T extends SomeType> {
        void doSomething(T object);
    }
    

    顺便说一下,您可以将接口扩展为:

    公共接口InternalPublicAPI扩展了PublicAPI{ .... 在这里添加您的内部方法 }

    在Hibernate中有这样的东西,有SessionSessionImplementor接口