Дело не в том, что статические методы не хороши, просто в том, что они имеют определенную цель.
Прежде всего, мы говорим о закрытом методе, поэтому это не является обычным для любого кода внекласс, чтобы называть это.Поэтому только разработчик класса будет писать код для его вызова.Это означает, что менее вероятно, что он будет вызван неправильно.
Кроме того, при тестировании класса следует убедиться, что он работает так, как должен.
Во-вторых, статический метод не имеет доступа к переменным экземпляра внутри объекта.Поэтому если целью метода является чтение или изменение переменной экземпляра, то она не может быть статической.
Если вычисление, выполняемое методом, является общим для внутренней мутации переменных, ипубличный статический метод, который хочет выполнить ту же услугу для внешнего абонента, тогда метод должен быть статическим.Но если это не так, он не обязательно должен быть статическим.
Редактировать : Например:
Если у вас нет внешней необходимости выполнять упрощение:
class Graph {
private Set<Edge> edges;
// {...}
public void newEdge(Edge e) {
edges.add(e);
simplify();
}
private void simplify() {
// use this.edges as your input
// do something
// set the value of your output to this.edges
}
}
Другое редактирование :
объект должен быть таким же от начала и до конца выполнения метода
Если для вас важна согласованность в многопоточной среде, вам необходимо использовать соответствующий метод синхронизации потоков - не полагайтесь только на изменение объекта в конце метода.