Java OSGi导出包含实现代码引用的API安全吗?

Java OSGi导出包含实现代码引用的API安全吗?,java,api,export,osgi,Java,Api,Export,Osgi,假设我实现了以下功能: public enum ExportAPIForOSGi { ; public static SpecialObject newSpecialObject() { return new SpecialObjectImplv1(); } } public abstract class SpecialObject { public abstract String specialMethod(String s); } publ

假设我实现了以下功能:

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的包,因为它们是您的公共API。SpecialObjectMPLV1应位于另一个未导出的包中。然后,您可以自由更改newSpecialObject的实现以使用另一个impl类,因为该impl类在公共API的签名中不可见。

您需要导出包含ExportAPIForOSGi和SpecialObject的包,因为它们是您的公共API。SpecialObjectMPLV1应位于另一个未导出的包中。然后,您可以自由更改newSpecialObject的实现以使用另一个impl类,因为impl类在公共API的签名中不可见。

好的,如果您理解得很好,那么只有声明为公共的和出现在公共签名中的内容才是重要的,对吗?如果我100%确定实现代码不会出现在任何声明为公共的文件中(但可能会在类文件中使用),那么我是安全的,对吗?抱歉,我忘记了包含@ToNotify@JVersty,您应该只导出不打算更改的接口/API。这使您可以自由更改实现。如果您更改任何导出的类,您必须卸载使用该模块的每个模块。好的,如果您理解得很好,那么只有声明为公共的和出现在公共签名中的内容才重要,对吗?如果我100%确定实现代码不会出现在任何声明为公共的文件中(但可能会在类文件中使用),那么我是安全的,对吗?抱歉,我忘记了包含@ToNotify@JVersty,您应该只导出不打算更改的接口/API。这使您可以自由更改实现。如果更改任何导出的类,则必须卸载使用该模块的每个模块。