OSGi导出API包含对实现代码的引用是否安全?

问题描述

| 假设我实现了以下内容:
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的签名中不可见。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...