我有一个名为 app 的Android Studio模块。 我有另一个名为 library 的库模块。
在库中,我有一些软件包,例如 manager 或 network 。 包 manager 包含一个名为 SPManager 的类,其中包含静态方法 storeSP()
package com.example.library.manager;
public class SPManager {
______ static void storeSP(){...}
}
是否可以只在我的库模块中访问 storeSP()?如果我选择package-private(无访问修饰符),我无法从同一模块中的 network 包中访问它。如果我选择公开,那么也可以从其他模块访问此方法。
提前致谢!
答案 0 :(得分:0)
将方法的访问修饰符更改为protected
,以便方法的范围保留在包和扩展它的类中。
public class Ex{
protected void test()
{
}
}
答案 1 :(得分:0)
一个简单的答案是,如果您用修饰符public
标记您的方法,那么任何其他类都可以访问它。
如果要使特定的类/接口仅在该模块内部可见/可访问,则可以考虑对这些类/接口进行混淆处理。经过混淆后,它们可能会变成无意义的程序包名称。这样,您可以隐藏您的私人课程。
从我的答案中查看更多内容:
答案 2 :(得分:0)
我也在寻找类似的东西,感谢@Fred,我实现了它。 对于可能在 Kotlin 中寻找答案的人,请使用 internal 修饰符。
<块引用>Kotlin 中有四种可见性修饰符:private、protected、 内部和公共。默认可见性为公开
private 表示仅在该类内部可见(包括其所有 会员)。
protected 与私有相同,但在子类中也可见。
internal 表示该模块内看到 声明类看到它的内部成员。
public 意味着任何看到声明类的客户端都会看到它的 公共成员。
open class Outer {
private val a = 1
protected open val b = 2
internal val c = 3
val d = 4 // public by default
protected class Nested {
public val e: Int = 5
}
}
class Subclass : Outer() {
// a is not visible
// b, c and d are visible
// Nested and e are visible
override val b = 5 // 'b' is protected
}
class Unrelated(o: Outer) {
// o.a, o.b are not visible
// o.c and o.d are visible (same module)
// Outer.Nested is not visible, and Nested::e is not visible either
}
有关详细说明和代码示例,请访问 here