Android模块访问修饰符 - 是否可以在android工作室库模块中使方法只能访问?

时间:2015-09-17 07:19:11

标签: java android android-studio

我有一个名为 app 的Android Studio模块。 我有另一个名为 library 的库模块。

中,我有一些软件包,例如 manager network 。 包 manager 包含一个名为 SPManager 的类,其中包含静态方法 storeSP()

package com.example.library.manager;

public class SPManager {
    ______ static void storeSP(){...}
}

是否可以只在我的模块中访问 storeSP()?如果我选择package-private(无访问修饰符),我无法从同一模块中的 network 包中访问它。如果我选择公开,那么也可以从其他模块访问此方法。

提前致谢!

3 个答案:

答案 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