我试图创建我的小图书馆。但我没有什么问题。我无法理解如何隐藏一些类/方法以免公开使用。 说我有结构:
-myPackage.com
-classA (public class example : public classA {...})
-classB (just a class example : class classB {...}
以这种方式将我的aar文件添加到android项目中。我只能从库中使用classA。 classB隐藏(对于开发者来说是隐形的)而我无法打电话给他(好吧)。但是classA可以使用classB中的函数。因为它在同一个包装中。好吧。 那么如何在另一个包中正确创建类?
-myPackage.com
-myHelpPackage
-classC (public class example: public class classC {...}
-classD (just a class example: class classD {...}
-classA (public class example : public classA {...})
-classB (just a class example : class classB {...}
通过这种方式,我有两个公共类,开发人员可以调用
classA
classC
classD仅对classA可见。所以我不能从classA调用classD(函数)。 主要问题:如何实现它? 我想只有一个classA来打电话。 classC没问题。 classD和classB应该对开发人员不可见。但仅适用于classA。有人可以帮我这个吗?
答案 0 :(得分:0)
如果您未指定任何访问级别修饰符,例如:
package myPackage.com
class classA {
}
默认情况下,该课程将为 package-private 。 这意味着它只对包内的类可见。 另请参阅Oracle here
的文档答案 1 :(得分:0)
JakobJeremais的注释中已经回答了这个问题,但是如果任何人都不清楚,或者他们跳过了该问题,因为他们只阅读了顶级答案(可以理解)。如果您在aar中有一个package-private类,它仍然可以公开访问,所以我建议您将该类嵌套在任何调用它的地方,这样您将很安全。
例如,我必须扩展EditText,以便可以仅覆盖一个方法,而不能覆盖其他任何方法。然后,我只能从另一个类中引用它,但不希望从我添加了库的任何项目中都可以访问它。所以我嵌套了它,现在很好。
public class VisibleClass extends View {
public static HiddenClass extends EditTextCompat {
@Override
public void annoyingFunction() {
//Disable this function
}
}
}
不过,我应该注意:编译器对于从布局访问它并不满意,因此我认为它并没有真正的帮助,因此我暂时不建议这样做。不过,如果您有时间修修补补,请继续。