假设我实现以下内容:
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;
}
}
每个类都在其自己的单独文件中声明。只有 ExportAPIForOSGi
和 SpecialObject
会被 OSGi 导出。
我的问题:导出 ExportAPIForOSGi
是否安全,因为它包含对实现代码的显式引用(即 SpecialObjectImplv1
)?实现代码会暴露吗?
让我们想象一下,稍后我在 ExportAPIForOSGi
中使用 SpecialObjectImplv2
而不是 v1?这会成为一个问题吗?
最佳答案
您需要导出包含 ExportAPIForOSGi 和 SpecialObject 的包,因为它们是您的公共(public) API。 SpecialObjectImplv1 应该位于另一个未导出的包中。然后,您可以随意更改 newSpecialObject 的实现以使用另一个 impl 类,因为该 impl 类在公共(public) API 的签名中不可见。
关于java - 包含对实现代码的引用的 OSGi 导出 API 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6159154/