Если метод публичный, его нельзя скрыть.То, что вы действительно можете искать, это просто способ ограничить доступ к вызову метода.Есть и другие способы достижения подобного эффекта.
Если есть некоторые вещи, которые ваш конечный автомат выполняет, которые «используются только один раз, когда моё приложение запускается впервые», это звучит так, как будто эти вещи могутслучиться в конструкторе.Хотя это зависит от того, насколько сложны эти задачи, вы, возможно, не захотите делать это во время сборки.
Поскольку вы сказали, что ваш конечный автомат статичен, это также Singleton ?Возможно, вы могли бы использовать шаблон Singleton .
public class SimpleStateMachine {
private static SimpleStateMachine instance = new SimpleStateMachine();
private SimpleStateMachine() {
super();
System.out.println("Welcome to the machine"); // prints 1st
}
public static SimpleStateMachine getInstance() {
return instance;
}
public void doUsefulThings() {
System.out.println("Doing useful things"); // prints 3rd
}
}
Вот некоторый код для клиента этого Singleton:
public class MachineCaller {
static SimpleStateMachine machine = SimpleStateMachine.getInstance();
public static void main(String... args) {
System.out.println("Start at the very beginning"); // prints 2nd
machine.doUsefulThings();
}
}
Обратите внимание, что экземпляр SimpleStateMachine
не являетсяне построен до первого доступа к вашему классу.Поскольку в клиенте MachineCaller
он объявлен как static
, это считается «первым доступом» и создает экземпляр.Помните об этом, если вы определенно хотите, чтобы ваш конечный автомат выполнял некоторые из этих задач инициализации во время запуска приложения.
Итак, если вы не хотите превращать свой класс конечного автомата в истинныйsingleton ... вы можете использовать статический блок инициализации для выполнения ваших одноразовых заданий при первом обращении к классу.Это выглядело бы примерно так:
public class SimpleStateMachine {
static {
System.out.println("First time tasks #1");
System.out.println("First time tasks #2");
}
public SimpleStateMachine() {
super();
System.out.println("Welcome to the machine");
}
public void doUsefulThings() {
System.out.println("Doing useful things");
}
}
Пока мы занимаемся этим, так как вы упомянули, что это конечный автомат ... книга Head First Design Patterns хорошо,Легко понятная трактовка State Pattern .Я рекомендую прочитать, если вы еще этого не сделали.