应用程序状态:JAVA中的静态变量或Setter和Getters

时间:2013-10-01 05:49:47

标签: java android

我想在我的类中了解我的应用程序状态之一。使用静态布尔变量或使用具有Getters和Setters方法的Singleton类是很好的。 简要介绍该方法的优缺点。

4 个答案:

答案 0 :(得分:2)

如果您将其设置为静态以便从其他类更改状态,则将其公之于众。还有静态变量的getter和setter是没有意义的,因为它们是类变量。将变量公开也不是一个好的编程习惯。因此,更好的选择是使用单例类并具有状态变量的getter和setter方法。此外,如果您处于多线程环境中,请将变量设置为volatile以实现正确同步。

答案 1 :(得分:1)

考虑使用访问器而不是直接暴露类的字段,实际上有许多充分的理由 - 除了封装的参数和使未来的更改更容易。

以下是我所知道的一些原因:

  • 与获取或设置相关联的行为的封装 property - 这允许其他功能(如验证) 稍后会更容易添加。

  • 在暴露a时隐藏属性的内部表示 使用替代表示的财产。

  • 将公共界面与变更隔离开来 - 允许公众 接口在实现更改时保持不变 影响现有消费者。

  • 控制生命周期和内存管理(处理)语义 属性 - 在非托管内存中尤为重要 环境(如C ++或Objective-C)。

  • 为属性更改时提供调试拦截点 在运行时 - 调试属性更改为的时间和位置 如果没有这一点,特定的价值可能会非常困难 语言

  • 改进了与旨在运营的库的互操作性 反对属性getter / setters - 模拟,序列化和WPF 浮现在脑海中。

  • 允许继承者更改属性的语义 通过覆盖getter / setter方法来表现和暴露。

  • 允许getter / setter作为lambda表达式传递 而不是价值观。

  • Getters和setter可以允许不同的访问级别 - 例如 获取可能是公开的,但可以保护该组。

答案 2 :(得分:0)

Singleton模式比静态类有几个优点。

  1. 单例可以扩展类和实现接口,而静态类不能(它可以扩展类,但不会继承它们的实例成员)。
  2. 单例可以懒惰或异步初始化,而静态类通常在首次加载时初始化,从而导致潜在的类加载器问题。
  3. 最重要的优势是,单身人士可以多态处理,而不会强迫他们的用户假设只有一个实例。
  4. This可能会对您有所帮助。

答案 3 :(得分:0)

b / w Singleton和一堆静态方法的主要区别在于单例可以实现接口,因此你可以传递单例,就好像它只是“另一个”实现一样。

你也可以克隆Singleton的对象,但是我们不能克隆静态类对象。