我知道我们可以在Java中创建包私有类。因此,该类是Internal,并且只能在指定的模块中访问:
class MyPackagePrivateClass
{
...
}
现在,我正在开发一个名为
LibraryA
的android库,并希望在自己的LibraryB
中使用现有的LibraryA
。如何防止LibraryA
用户直接使用LibraryB
?是否有类似包私有库的概念或类似概念?
更新(对于那些问“我为什么需要这个?”的人)
在
LibraryB
中,有这样的方法:public QueryBuilder select(String... columns);
但我强烈认为,我们应该使用
Type-Safe Enum pattern
并防止用户将字符串传递给这些方法(考虑到维护和重构问题)。因此,我决定将这些方法包装在LibraryA
中:public TypedQueryBuilder select(Column... columns) {
queryBuilder = queryBuilder.select(toString(columns));
return this;
}
因此,我的库的用户应使用我提供的Typed方法(此处的
Column
是类型安全的枚举)。但是,如果他们可以使用原始方法,则可以改用那些方法,我倾向于禁止这样做。 最佳答案
在Java中,通过多态性,您无法隐藏扩展类的公共方法。
我认为您可以使用Facade Pattern归档目标:隐藏所有复杂的逻辑,在这种情况下,控制访问,并在需要时实现一些接口。