使用私有静态方法

2022-09-01 03:05:07

您如何看待使用私有静态方法

就个人而言,我更喜欢使用静态私有方法而不是非静态方法,只要它不需要访问任何实例字段。

但我听说这种做法违反了OOP原则。

编辑:我想知道从风格的角度来看,而不是性能。


答案 1

方法本身并不违反OOP本身,但是当您在不需要(并且不能*)访问实例字段的类上有很多这些方法时,您就不会以OO方式编程,因为“对象”意味着在该状态上一起定义的状态+操作。如果这些方法不需要任何状态,为什么要将它们放在该类上?private static

(*) = 原则上,由于 Java 中的类级可见性,类上的静态方法可以访问该类的对象的实例字段,例如:

class Test
{
  int field = 123;

  private static void accessInstance(Test test)
  {
    System.out.println(test.field);
  }
}

当然,您需要自己传递对实例(指针)的引用,但这样您实际上是在模仿实例方法。只是为了完整起见,提到这一点。this


答案 2

如上所述,私有静态方法通常可用于组织重用逻辑和减少/消除重复代码。我很惊讶我没有注意到在这次讨论中提到任何关于性能的内容。摘自Renaud Waldura的“The Final Word on Final”:

(注意,私有静态方法是隐式最终的)

“由于最终方法仅在声明类中实现,因此无需动态调度对最终方法的调用,而是可以使用静态调用。编译器可以直接调用该方法,完全绕过通常的虚拟方法调用过程。因此,最终方法也是通过实时编译器或类似优化工具进行内联的候选方法。(请记住,私有/静态方法已经是最终的,因此始终考虑进行此优化。

查看全文:http://renaud.waldura.com/doc/java/final-keyword.shtml