Я предлагаю другой подход:
Вы можете сделать свой абстрактный класс Quest
an enum
, а затем реализовать методы abstract
в каждой константе перечисления (ниже приведен только пример):
public enum Quest {
ESCORT_MISSION {
public void start(){/* escort something */}
},
BANDIT_RAIDS{
public void start(){/* raid bandits */}
},
BANDIT_RAIDS2{
public void start(){/* raid bandits, again */}
};
public abstract void start();
// add here other methods and/or constructors and/or fields
}
Таким образом, вы можете случайным образом выбрать константу перечисления (которая является экземпляром Quest
):
Quest[] values = Quest.values();
int randomIndex = ThreadLocalRandom.current().nextInt(values.length);
Quest quest = values[randomIndex];
Единственным недостатком является то, что вы должны поместить всереализации в один файл класса, который может довольно легко запутаться