问题描述
|
假设我实现了以下内容:
public enum ExportAPIForOSGi {
;
public static SpecialObject newSpecialObject() {
return new SpecialObjectImplv1();
}
}
public abstract class SpecialObject {
public abstract String specialMethod(String s);
}
public class SpecialObjectImplv1 extends SpecialObject {
@Override
public String specialMethod(String s) {
return \"33\" + s;
}
}
每个类都在其自己的单独文件中声明。 OSGi仅导出ѭ1be和SpecialObject
。
我的问题是:导出ExportAPIForOSGi
是否安全,因为它包含对实现代码的显式引用(即SpecialObjectImplv1
)?实现代码会公开吗?
假设稍后,我在I1ѭ中使用SpecialObjectImplv2
而不是v1?这会成为问题吗?
解决方法
您需要导出包含ExportAPIForOSGi和SpecialObject的软件包,因为它们是您的公共API。 SpecialObjectImplv1应该位于另一个未导出的包中。然后,您可以自由地将newSpecialObject的实现更改为使用另一个impl类,因为impl类在公共API的签名中不可见。