我正在使用java开发SDK,我的问题是隐藏某些java类/包,因此使用这个sdk的第三方应用程序不会暴露给这些下划线类
我知道如果sdk中的所有类对象都在一个包内,我可以将默认/受保护的访问修饰符分配给我想要隐藏的类。但是,像许多java项目一样,像我的sdk这样的java项目由不同的包组成,它们适当地对relivant java类进行分组。
这意味着如果我想隐藏/保护com.abc中的类,那么位于com.a中的世界可见的主根类将无法访问com.abc等中受保护的类
我如何为此提供解决方案,而不是仅仅将所有类转储到一个大包中?
感谢。
答案 0 :(得分:2)
Java命名空间和访问修饰符不是分层的,即使它看起来像是由文件夹组成的命名空间结构。 Java确实有一个带有任意完全限定名称的平面命名空间(点表示法)。
因此,如果您想要关闭库类并在库中同时使用它,则没有其他方法可以将它们放在同一个包中。也许最好解释一下:当你在包之外使用一个类时,这个类构成了API的一部分,因为Java中的每个包都是一个模块。
答案 1 :(得分:1)
您可以在子包中使用工厂类并使用接口。这样你就可以隐藏你的实现类了。