Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.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_Android - Fatal编程技术网

Java 将库作为专用包导入

Java 将库作为专用包导入,java,android,Java,Android,我知道我们可以用java创建一个包私有类。因此,该类是内部的,只能在指定的模块中访问: class MyPackagePrivateClass { ... } 现在我正在开发一个名为LibraryA的android库,我希望在我自己的LibraryA中使用现有的LibraryB。如何防止LibraryA的用户直接使用LibraryB 有没有像包私有库之类的概念 更新(适用于那些询问“我为什么需要它”的人) 在LibraryB中有如下方法: public QueryBuilder sel

我知道我们可以用java创建一个包私有类。因此,该类是内部的,只能在指定的模块中访问:

class MyPackagePrivateClass
{
    ...
}
现在我正在开发一个名为
LibraryA
的android库,我希望在我自己的
LibraryA
中使用现有的
LibraryB
。如何防止
LibraryA
的用户直接使用
LibraryB

有没有像包私有库之类的概念

更新(适用于那些询问“我为什么需要它”的人) 在
LibraryB
中有如下方法:

public QueryBuilder select(String... columns);
但我强烈认为,我们应该使用
类型安全枚举模式
,并防止用户向这些方法传递字符串(考虑到维护和重构问题)。因此,我决定将这些方法包装到
LibraryA

public TypedQueryBuilder select(Column... columns) {
        queryBuilder = queryBuilder.select(toString(columns));
        return this;
    }

因此,我的库的用户应该使用我提供的类型化方法(
Column
是这里的类型安全枚举)。但是,如果他们能够访问原始方法,他们可能会使用这些方法,我倾向于禁止这种做法。

从库B中创建一个jar文件,并将其导入库a中


在Java中,使用多态性,您无法隐藏扩展类的公共方法

我认为您可以通过以下方式实现目标:隐藏所有复杂的逻辑,在本例中,控制访问,并在需要时实现一些接口。

尝试达到相同的目标。但它可能需要足够长的时间才能移植到Android。在此之前,IMO的最佳解决方案是使用包私有方法。用户将能够理解他不应该使用这些方法


无论如何,不可能最终禁止库用户做某些事情,因为可以使用反射或替换类来摆脱讨厌的限制。但是可以鼓励用户不要做某些事情,这是可以做到的。

请仔细阅读问题。我知道如何导入jar文件。我希望导入的jar文件只对我自己而不是我库的用户可访问。在正常情况下,您提到的导入我的库的应用程序也可以使用我的库中导入的库。所有库都与其他JAR有一些依赖关系,为什么您需要隐藏它?好吧,那么库B最终将成为库a的一部分?@GOXR3PLUS是的,据我所知,没有包私有库的概念。您可以看看OSGi或类似的框架,它试图解决这些问题。@a.toraby现在很清楚了,thks。让我想想什么设计模式允许这种行为。最后一个问题:你们在LibA中的类,在LibB中扩展一个类,对吗?我认为这是一个很好的方法,类似于使用包装器