Java 私有静态方法在类中的利弊?

Java 私有静态方法在类中的利弊?,java,static,private,Java,Static,Private,有时在编写类时,您需要一些助手方法来处理一些简单的事情(以某种方式更改字符串或进行一些简单的计算) 如果helper功能足够小(任何其他类都不需要),那么在这个类中编写helper方法是有意义的 现在:假设您不需要访问任何成员变量,那么最好将此方法设置为private或private static 下面的示例:仅实现一个方法,该方法检查字符串是否不是null,是否包含foo public class SomeClass ... public void calculate(String in

有时在编写类时,您需要一些助手方法来处理一些简单的事情(以某种方式更改字符串或进行一些简单的计算)

如果helper功能足够小(任何其他类都不需要),那么在这个类中编写helper方法是有意义的

现在:假设您不需要访问任何成员变量,那么最好将此方法设置为
private
private static

下面的示例:仅实现一个方法,该方法检查字符串是否不是
null
,是否包含foo

public class SomeClass

...

 public void calculate(String inputString) {
  ...
  boolean foo = getFoo(inputString);
 }

 private (static) boolean getFoo(String inputString) {
  return inputString != null && inputString.contains("foo");
 }

}

使该方法成为静态或非静态的方法有利弊吗。有一个通用的做和不做吗?

我个人会将方法设置为静态的-它更清楚地表明它不依赖于对象的状态。这可能会在线程安全方面产生连锁反应(尽管如果要访问该类型的静态成员,您需要小心)

考虑到它是私有的,您不必担心子类是否希望重写它


您可以在以后将其设置为非静态-我认为唯一的副作用是可能会更改序列化ID(二进制序列化就是这样一种痛苦)。

如果需要访问非静态成员变量,则将其设置为非静态;如果不需要访问非静态成员变量,则将其设置为静态。

“副作用”通常用于表示编程上下文中的其他内容。我稍微改变了你的问题术语。序列化ID在静态或非静态时会改变?@leifg:是的,我相信在两者之间切换会改变ID。如果你担心的话,试试看。@Jon当然,如果你在类中重写serialVersionUID,那就不是问题了?@Bringer128:是的,绝对是。我只是在想可能会咬你的副作用。实际上我不同意这一点。对于代码样式和可读性来说,混合从来都不是一个好的选择。由于您可能有其他使用非静态成员的助手函数,我认为最好将助手函数连续声明为非静态,以获得同构的代码样式。为了线程安全,它甚至不强迫您将单个函数设置为非静态函数(在您之前声明thm static之后)。@Paranaix:在一个类中混合使用静态函数和非静态函数对我来说是完全合理的。即使避免这种混合是一个好主意,我可能会使我的所有助手函数都是静态的,并将对象作为参数传入。拥有一个不使用对象状态的非静态方法是令人困惑的。