【问题标题】:Hide classes from my library (aar)从我的图书馆隐藏课程 (aar)
【发布时间】:2017-10-16 08:43:08
【问题描述】:

我正在尝试创建我的小图书馆。但我有一点问题。我无法正确理解如何隐藏某些类/方法以防止公共使用。 说我有结构:

-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(functions)。 主要问题:如何实现它? 我只想调用一个classA。 C类没问题。 classD 和 classB 对开发人员应该是不可见的。但仅对 A 类可见。任何人都可以帮助我吗?

【问题讨论】:

  • 我猜你的意思是 classD 和 classB 在你的问题中应该对开发者不可见 ;)
  • @Antoine 对,谢谢。
  • package scope 上课可能吗? stackoverflow.com/questions/215497/…

标签: java android aar


【解决方案1】:

如果您不指定任何访问级别修饰符,例如:

package myPackage.com

class classA {
}

那么这个类默认是package-private。 这意味着它只对包内的类可见。 另请参阅 Oracle here 的文档

【讨论】:

  • 您希望 A 类和 C 类随处可见?然后你需要将它们公开。请重新表述您的问题,因为您想要达到的目标还不够清楚。
  • 不,我希望只有 A 类对开发人员可见。而 C 类仅对 A 类可见
  • 您可以将 C 类嵌入到 A 类中。
  • Jakob,这里的 C 级很小,实际上 - C 级很大。
【解决方案2】:

JakobJeremais 已经在 cmets 中回答了这个问题,但如果有人不清楚,或者他们因为只阅读顶级答案而跳过它(可以理解)。如果你的 aar 中有一个包私有类,它仍然可以公开访问,所以我建议将这个类嵌套在任何调用它的地方,这样你就安全了。

例如,我必须扩展 EditText 以便我可以只覆盖一种方法,而不能覆盖其他任何方法。然后我不得不从另一个类中引用它,但不希望从我添加我的库的任何项目中访问它。于是我把它嵌套了,现在就好了。

public class VisibleClass extends View {
    public static HiddenClass extends EditTextCompat { 
        @Override
        public void annoyingFunction() {
            //Disable this function
        }
    }
}

但我应该注意:编译器不喜欢从布局中访问它,所以我认为它并没有真正帮助,所以我暂时不推荐它。不过,如果您有时间修补,请继续。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 2016-02-05
    • 2011-09-14
    • 2022-07-20
    • 2013-03-04
    • 2018-06-18
    相关资源
    最近更新 更多