【问题标题】:Criteria for Java static methods?Java静态方法的标准?
【发布时间】:2012-01-11 08:14:37
【问题描述】:

有人告诉我:

如果您使用的是 Eclipse 并且在您的方法中没有看到任何蓝色字词(即成员变量),那么这些方法应该是真正的静态方法,只要参数(如果有的话)是原始类型,或者(在对象引用的情况下)是不可变的和/或线程安全的。

在决定一个实例方法是否真的应该是一个静态方法时,Java 开发人员是否应该考虑其他任何标准?

【问题讨论】:

    标签: java methods static


    【解决方案1】:

    简单地说,如果它是纯“助手/函数”,不修改对象的内部状态,那么它是静态方法的好候选。

    【讨论】:

      【解决方案2】:

      ...除非您计划子类化并覆盖该方法。

      只要参数(如果有的话)是原始类型,或者(在对象引用的情况下)是不可变的和/或线程安全的。

      我不明白为什么这是相关的。无论您是否将方法设为静态,任何线程安全注意事项都是完全相同的。只有不可变参数的静态方法(也不会与类的静态字段混淆)是线程安全的。如果参数不是不可变的并且方法更改了它们并且这变得非线程安全,那么将其作为实例方法将毫无帮助。

      【讨论】:

        【解决方案3】:

        如果您不需要对象的实例来调用该方法,则它应该是静态的。那就是:如果您只使用参数而不使用对象的成员。通常这些收集在从不实例化的实用程序或帮助程序类中(通过声明私有默认构造函数来确保安全)。

        ps:关于“蓝字”:您应该始终使用this. 来访问成员变量,而不是依赖您的 IDE,因为一旦您使用简单的查看器/编辑器,代码就会变得非常难以阅读。

        【讨论】:

        • 如果您不需要实例并且不想子类化(我猜这是需要实例的特殊情况:用于方法调度)
        • 我不同意总是使用this.。我个人认为这会损害可读性并增加臃肿,所以我只在真正需要时使用this
        【解决方案4】:

        您计划以全局方式为所有实例使用的任何函数都可以设为静态

        【讨论】:

          猜你喜欢
          • 2017-12-19
          • 2010-09-16
          • 2015-05-08
          • 2013-03-31
          • 1970-01-01
          • 2018-10-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多