Вам необходимо передать Main в статический метод:
public static void showMessage(final Main main) {
System.out.println("message = " + main.messageMethod());
}
Рекомендации по написанию служебных классов:
- Утилиты / методы должны быть без состояний.Утилиты не должны иметь членов.Служебные методы должны принимать все необходимые переменные в качестве параметров.Служебные классы могут вызываться из нескольких потоков в параллельной среде.Изменяемые переменные-члены делают классы не ориентированными на многопотоковое исполнение и вызывают неприятные ошибки в параллельной среде
- Методы утилит не должны создаваться и не вводиться. У них должен быть закрытый конструктор.
- Классы утилит должны бытьfinal (не расширяемый).
После применения этих правил к вашему служебному классу он будет выглядеть следующим образом:
public final class Util {
private Util();
public static void showMessage(final Main main) {
System.out.println("message = " + main.messageMethod());
}
}
Этот класс является окончательным (не может быть расширен), имеетзакрытый конструктор (не может быть создан или внедрен), без состояния (без элементов, поточно-ориентированный, если метод showMessage не изменяет состояние главной переменной).