2016-12-03 55 views
1

我正在用的插头(我的世界)一个插件,我用枚举来存储邮件/语言,也具体的事情地位。 问题是状态枚举取决于消息枚举。消息枚举依赖于文件messages.yml。 我知道如何重新加载该文件,但是当我这样做时,如果我更改文件messages.yml中的翻译,但发送的消息会更新,但状态消息的状态不会更新。我会以“刷新”枚举实例

因此,我想知道是否有可能删除一个枚举的实例,并再次向产生它更新这些值喜欢当插件重新加载它。

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; 
 
} 
 

 
}

请不要回答这个问题,我可以把WAITING(Message.WAITING),做Status.WAITING.getName(),会做name.getMessage();.我写这段代码作为例子,我的函数不使用getName()函数,只是enum的值,所以名称写在消息枚举中。

如果有人解决这个问题,请提前致谢。 :)

+0

为什么你真的需要使用枚举?你可以在所有消息中使用带getters的类,它们会在你的配置文件中找到并存储在地图中,例如 – Kerooker

+0

虽然'enums'可能听起来像是储存消息的好主意,但事实并非如此。枚举并不是为了重新加载而设计的,它们被设计成常量,所以任何黑客你放在一起都不值得花费。我推荐的是直接从文件中获取消息。 –

回答

0

您不能添加/删除到enum,因为其他代码中引用了enum。这将等同于移除的变量foo所有痕迹,然后试图调用foo + 1

如果你要重新加载消息文件,你可以做file.reloadConfig()将从磁盘重新加载邮件,然后任何当你调用getMessage()时,它会在较新的文件中查找较新的消息。

+0

我不想修改枚举的值,但重新加载枚举类。就像移除存放的地方并再次生成它一样。 他们的价值改变重新加载插件(如果文件被修改),所以我认为有可能强制只重载一个枚举或所有的插件也。我已经测试了各种方式来重新加载我的插件,但枚举保留了它们的值,但是当我用plugman插件重新启动时,它们发生了改变。 – MrTigreroux