我有一个必须作为库导出的项目。
该项目有多个包,我希望无法从将托管我的库的应用程序访问一些公共方法/类。快速举例:
package test.package1
import test.package2.*;
//Class1 can be accessed from external
public class Class1 {
public Class1() {}
public doSomething(){
//Class2, instead, should be only "library-internal" and not accessed from external
Class2 c2 = new Class2();
c2.doSomething();
}
}
package test.package2
//Library private class
public class Class2 {
public doSomething(){
}
}
我发现很多帖子都在谈论这个问题:
但是这些都没有解决我的问题在一个清晰的模式(对我来说),所以,我要问的是,我做错了是包装结构还是存在一个优雅的解决方案问题
我认为我可以快速解决问题,只是将所有类放在同一个包中,只公开我想要的内容,可以从外部访问,但我不认为这是一个很好的解决方案,并且会变得更糟项目可读性。
==============
编辑1:我尝试使用更具体的示例扩展我的问题
想象一下,我有一个名为" test.model "我把所有将与SQLite数据库交互的类放在哪里。
现在,这个包中的所有类都必须是所有其他类的库内访问权限"内部"包。
总是在同一个应用程序中,我有一个名为" test.ui "在那里我把所有的碎片和活动。所有这些ui组件都需要访问" test.model "中出现的类。包裹,但我不想要" test.model "可以从将托管库的应用程序中看到包。
" test.ui "中的活动和片段,可以从托管该库的应用程序中使用。
下面是项目结构的一个例子:
//I want that this package is for library "internal" use only
--- package test.model
------ Author.java
------ Book.java
//This package can be accessed from project hosting my library
--- package test.ui
----- BookListFragment.java //Can access, with a private method, to Book class
----- AuthorListFragment.java //Can access, with a private method, to Author class
答案 0 :(得分:0)
您需要将Class2移动到test.package1中,然后如果您将Class2的可见性从公共级别更改为包级别(即从类声明中删除“public”一词),这应该可以达到您想要的效果。
如果你真的不想在包中移动类,那么你真的需要看看更复杂的Java OOP交互。
如果您对类的操作类型更具体,那么您可能会得到更好的示例。