如何向世界其他地区隐藏 Java API 的内部结构

2022-09-03 15:01:15

我正在开发一个Java Api来做事(秘密,呃,;)。

有没有办法隐藏类和我的API的内部结构?

到目前为止,我发现:

  • 使用内部类(丑陋的方式,我不想把所有的东西都放在类文件上)
  • 所有类都在一个包中,以便我可以使用“包”可见性(也很丑陋,我需要更多的包)

例:

---
package net.my.app;
//this is the Public Access
class MyPublicClass{
    public void somePublicFunction(){ 
        //access to not visibil classes
    }
}

---
package net.my.app.notvisible:
//this is what i want to hide
class MyNOTPublicClass{
    ...
}
---

有什么想法吗?谢谢!


答案 1

对于您的问题,有两种解决方案不涉及将所有类保留在同一个包中。

第一种是使用(Practical API Design, Tulach 2008)中描述的朋友访问器/朋友包模式。

第二种是使用OSGi。

相关问题:1234


答案 2
  • 使用接口定义应用的功能
  • 创建访问服务的主入口点,仅返回接口
  • 我不会费心去实际隐藏实现类。你永远无法在Java中真正隐藏它们,那些在技术上感兴趣的人可能会使用调试器启动你的应用程序。只需不提供公共构造函数,例如

关于这个评论:

肖恩,你能更详细地阐述一下你的答案吗?...

实现我的第二个项目符号点的一种方法是使用服务查找类,例如

public class Lookup {
    private static final Foo foo = new FooImpl();
    public static Foo getFoo() { 
        return foo; 
    }
}

Foo是一个接口,一个实现类(如果你想强制它不能被客户端实例化,它可以是包私有的)FooImpl


推荐