【问题标题】:App State: Static variables or Setters and Getters in JAVA应用程序状态:JAVA 中的静态变量或 Setter 和 Getter
【发布时间】:2013-10-07 04:23:13
【问题描述】:

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

【问题讨论】:

  • 我更喜欢...最好有单例类..
  • 一个同步的单例类
  • 在单例中,您可以更好地控制 getter/setter 的发生方式

标签: java android


【解决方案1】:

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

【讨论】:

  • 为你的回答干杯!评论“静态变量的getter和setter也没有意义,因为它们是类变量。”我的 Getters 和 Setters 方法将有私有的非静态变量。
【解决方案2】:

实际上有很多充分的理由考虑使用访问器而不是直接公开类的字段 - 不仅仅是封装的参数和使未来的更改更容易。

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

  • 封装与获取或设置 属性 - 这允许附加功能(如验证) 以后更容易添加。

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

  • 使您的公共界面免受更改 - 允许公众 接口保持不变,而实现更改没有 影响现有消费者。

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

  • 在属性更改时提供调试拦截点 在运行时 - 调试属性何时何地更改为 在某些情况下,如果没有这个,特定值可能会非常困难 语言。

  • 改进了与旨在运行的库的互操作性 针对属性获取器/设置器 - 模拟、序列化和 WPF 想起来。

  • 允许继承者改变属性的语义 行为并通过覆盖 getter/setter 方法公开。

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

  • Getter 和 setter 可以允许不同的访问级别 - 例如 get 可能是公开的,但 set 可能是受保护的。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      单例模式与静态类相比有几个优点。

      1. 单例可以扩展类和实现接口,而静态类不能(它可以扩展类,但不继承其实例成员)。
      2. 单例可以延迟或异步初始化,而静态类通常在首次加载时进行初始化,从而导致潜在的类加载器问题。
      3. 不过,最重要的优势是可以多态地处理单例,而不会强迫用户假设只有一个实例。

      This 可以帮到你。

      【讨论】:

        猜你喜欢
        • 2014-01-22
        • 1970-01-01
        • 2015-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-08
        • 2012-06-13
        • 1970-01-01
        相关资源
        最近更新 更多