2016-12-03 1 views
1

저는 Spigot (Minecraft)로 플러그인을 만들고 있는데 enum을 사용하여 메시지/언어 및 특정 항목의 상태를 저장합니다. 문제는 메시지 열거 형에 따라 상태 열거 형이 달라집니다. 그리고 메시지 열거 형은 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; 
 
} 
 

 
}

내가 name.getMessage 할 것 Status.WAITING.getName을()() 대기 (Message.WAITING)를 넣고 할 수있는 대답하지 마십시오 ;. 이 코드를 예제로 썼습니다. 함수는 getName() 함수를 사용하지 않고 열거 형의 값만 사용하므로 메시지 열거 형에 이름이 기록됩니다.

아무도이 문제를 해결하면 미리 감사드립니다. :)

+0

실제로 열거 형을 사용해야합니까? 예를 들어, – Kerooker

+0

과 같이 모든 메시지에 게터를 사용하여 맵에 저장하고 저장할 수 있습니다. 'enums'는 메시지를 저장하는 좋은 아이디어처럼 들릴 수 있지만 실제로는 그렇지 않습니다. 열거 형은 다시로드되도록 설계되지 않았으며 상수로 설계되었으므로 함께 배치 한 해킹은 그만한 가치가 없습니다. 필자가 권장하는 것은 파일에서 직접 메시지를받는 것입니다. –

답변

0

다른 코드에서 enum이 참조되어 있기 때문에 enum에 추가/제거 할 수 없습니다. 이것은 변수의 흔적을 모두 지우는 것과 같을 것입니다. foo 다음에 호출하려고합니다. foo + 1

메시지 파일을 다시로드하려면 디스크에서 메시지를 다시로드하는 file.reloadConfig()를 수행 한 다음 getMessage()를 호출하면 새로운 파일에서 최신 메시지를 찾습니다.

+0

enum 값을 수정하고 enum 클래스를 다시로드하지 않으려합니다. 재고가있는 곳을 제거하고 다시 생성하는 것과 같습니다. 플러그인의 리로드 (파일이 수정 된 경우)에 값이 변경되므로 enum이나 모든 플러그인에 대해서만 다시로드 할 수 있다고 생각합니다. 플러그인을 다시로드하는 다양한 방법을 이미 테스트했지만 enum은 값을 유지했지만 플러그 인 플러그인으로 다시 시작할 때 변경되었습니다. – MrTigreroux