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

标签 java api export osgi

假设我实现以下内容:

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;
    }
}

每个类都在其自己的单独文件中声明。只有 ExportAPIForOSGiSpecialObject 会被 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/

相关文章:

java - (LibGDX) - 在调用角色的渲染方法时出现 NullPointerException

php - JavaScript API - 如何在 PHP 中实现(适用于 Google 新闻)

javascript - 在javascript中每15毫秒进行一次API调用

javascript - 从 Swapi API 获取数据 https ://swapi. co/api/people/

vb.net - 编译或导出编码表单

excel - ComponentArt:导出网格数据

javascript - 导出变量时如何解析 'SyntaxError: export declarations may only appear at top level of a module'?

java - Sun 的统一日志记录格式是否已在任何地方发布过?

java - Eclipse - 项目引用另一个项目而不是 .jar 文件

java - 相当于 Android 的 getch()