2016-12-03 7 views
1

Я делаю плагин с Spigot (Minecraft), и я использую перечисления для хранения сообщений/языков, а также статус конкретной вещи. Проблема в том, что перечисление состояния зависит от перечисления сообщений. И перечисление сообщений зависит от файла messages.yml. Я знаю, как перезагрузить этот файл, но когда я это делаю, отправляемые сообщения обновляются, если я меняю переводы в файле messages.yml, но сообщения о статусе, которые хранятся в списке состояний, не обновляются.Я бы «перезагрузил» экземпляр enum

Поэтому я хотел бы знать, если это возможно удалить экземпляр перечисления и создать его снова к обновить их значения, как это делает, когда плагин будет перезагружен.

public enum Message { 
 

 
WAITING("Status.Waiting"); 
 

 
private String path; 
 

 
Message(String path) { 
 
this.path = path; 
 
} 
 

 
public String getMessage() { 
 
    return file.getString(path); 
 
} 
 

 
} 
 

 
public enum Status { 
 

 
WAITING(Message.WAITING.getMessage()); 
 

 
private String name; 
 

 
Status(String name) { 
 
this.name = name; 
 
} 
 

 
public getName() { 
 
return name; 
 
} 
 

 
}

Пожалуйста, не отвечайте, что я могу поставить ЖДАТЬ (Message.WAITING) и делать Status.WAITING.getName(), который будет делать name.getMessage() ;. Я привел этот код в качестве примера, мои функции не используют функцию getName(), просто значение перечисления, так что имя записано в перечислении сообщений.

Заранее благодарим, если кто-нибудь решит это. :)

+0

Почему вы действительно должны использовать перечисления? Вы можете использовать класс с геттерами для всех сообщений, которые могли бы найти их в вашей конфигурации и хранить на карте, например – Kerooker

+0

Хотя 'enums' может показаться отличной идеей для хранения сообщений - это действительно не так. Перечисления не предназначены для перезагрузки, они предназначены для констант, поэтому любые хаки, которые вы собрали вместе, просто не будут стоить усилий. Я рекомендую просто получать сообщение из файла напрямую. –

ответ

0

Вы не можете добавить/удалить enum, так как enum ссылается на другой код. Это было бы то же самое, как удаление всех следов переменной foo затем пытается вызвать foo + 1

Если вы хотите, чтобы перезагрузить файл сообщений, вы можете сделать file.reloadConfig(), который будет перезаряжать сообщения с диска, а затем любой время, которое вы вызываете getMessage(), будет искать новое сообщение в более новом файле.

+0

Я не хочу изменять значение перечисления, но перезагружать класс перечисления. Как удаление места, где оно хранится, и сгенерировать его снова. Значения этих значений изменяются при перезагрузке плагина (если файл изменен), поэтому я думаю, что можно принудительно перезагрузить его только для перечисления или всего плагина. Я уже тестировал различные способы перезагрузки моего плагина, но перечисления сохраняли их значения, но меняли, когда я перезапускал его с плагином плагина. – MrTigreroux