Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使java类仅在项目/应用程序工作区内可见_Java - Fatal编程技术网

使java类仅在项目/应用程序工作区内可见

使java类仅在项目/应用程序工作区内可见,java,Java,我正在用java开发一个SDK,我的问题是隐藏某些java类/包,这样使用该SDK的第三方应用程序就不会暴露于这些底层类的 我知道,如果sdk中的所有类对象都在一个包中,我可以为要隐藏的类分配默认/受保护的访问修饰符。然而,像许多java项目一样,像MySDK这样的java项目由不同的包组成,这些包对relivant java类的包进行了适当的分组 这意味着,如果我想隐藏/保护com.a.b.c中的一个类,那么在com.a中对世界可见的主根类将无法访问com.a.b.c等中受保护的类 我怎样才能

我正在用java开发一个SDK,我的问题是隐藏某些java类/包,这样使用该SDK的第三方应用程序就不会暴露于这些底层类的

我知道,如果sdk中的所有类对象都在一个包中,我可以为要隐藏的类分配默认/受保护的访问修饰符。然而,像许多java项目一样,像MySDK这样的java项目由不同的包组成,这些包对relivant java类的包进行了适当的分组

这意味着,如果我想隐藏/保护com.a.b.c中的一个类,那么在com.a中对世界可见的主根类将无法访问com.a.b.c等中受保护的类

我怎样才能提供一个解决方案,而不是仅仅在一个大的包中转储所有类


谢谢。

Java名称空间和访问修饰符不是层次结构,即使这似乎是由文件夹组成的名称空间结构。Java实际上有一个带有任意完整限定名(点表示法)的平面名称空间


因此,如果您想关闭库类并同时在库中使用它,那么没有其他方法可以将它们放在同一个包中。也许最好解释一下:当您在包外使用一个类时,这个类成为API的一部分,因为Java中的每个包都是一个模块

您可以在子包中工厂化类并使用接口。这样,您就可以隐藏您的实现类。

如果不进行who项目重组,就太混乱了。proguard怎么样?这能让类中的某些部分访问visibity吗?如果是,如何访问?