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 楼答案
为什么不将界面泛化?比如:
顺便说一下,您可以将接口扩展为:
公共接口InternalPublicAPI扩展了PublicAPI{ .... 在这里添加您的内部方法 }
在Hibernate中有这样的东西,有
Session
和SessionImplementor
接口