假设我有一个被设计为实例化的类。我在类中有几个私有的“helper”方法,它们不需要访问任何类成员,只对它们的参数进行操作,并返回一个结果。

public class Example {
   private Something member;

   public double compute() {
       double total = 0;
       total += computeOne(member);
       total += computeMore(member);
       return total;         
   }

   private double computeOne(Something arg) { ... }
   private double computeMore(Something arg) {... } 
} 

是否有特别的理由指定computeOne和computeMore作为静态方法-或者有特别的理由不这样做?

当然,让它们保持非静态状态是最简单的,尽管它们当然可以是静态的,而不会引起任何问题。


当前回答

我将它们声明为静态,从而将它们标记为无状态。

对于不能导出的小操作,Java没有更好的机制,所以我认为私有静态是可以接受的。

其他回答

我将它们声明为静态,从而将它们标记为无状态。

对于不能导出的小操作,Java没有更好的机制,所以我认为私有静态是可以接受的。

跑题:我会把辅助方法放在一个独立的实用程序/辅助类中,其中只有静态方法。

在使用点(阅读为“相同的类”)拥有帮助方法的麻烦在于,某些人可能会选择将他们自己不相关的帮助方法发布在相同的位置

如果该方法基本上只是一个子例程,永远不会使用状态信息,则将其声明为静态。

这允许它在其他静态方法或类初始化中使用,即:

public class Example {
   //...

   //Only possible if computeOne is static
   public final static double COMPUTED_ONE = computeOne(new Something("1"));

   //...
}

一个原因是,在其他条件相同的情况下,静态方法调用应该更快。静态方法不能是虚方法,也不接受隐式this引用。

更具体地说,对于您给出的示例,定义这些方法的目的似乎更多是为了在阅读时使代码清晰,而不是为了实现功能(它们被定义为私有)。在这种情况下,使用静态确实没有任何用处,因为静态的目的是公开类的功能。