`Enum.name ()`과`Enum.toString ()`의 차이점은 무엇입니까? [복제]
이 질문에 이미 답변이 있습니다.
의 문서를 읽은 후 name () 을 사용할 때와 toString () 사용할 때를 String java.lang.Enum.name()이해하지 못합니다 .
열거 형 선언에 선언 된대로 정확하게이 열거 형 상수의 이름을 반환합니다. 대부분의 프로그래머는 toString 메서드가 사용자에게 더 친숙한 이름을 반환 할 수 있으므로이 메서드보다 우선적으로 toString 메서드를 사용해야합니다. 이 방법은 주로 정확한 이름을 얻는 데 의존하는 특수한 상황에서 사용하도록 설계되었으며 이는 릴리스마다 다르지 않습니다.
특히 문서에서 선호한다고 말했지만 toString()Java의 자체 StandardLocation 열거는 name문서가 그렇지 않다고 생각했을 때 사용합니다 .
public String getName() { return name(); }
또한 다음 과 같이 Enum구현 toString()합니다.
public String toString() {
return name;
}
나는 사용자 정의 열거 덮어 쓰게 상황을 생각할 수 없다 toString()그렇게 name()하고 toString()거의 항상 정확히 동일합니다.
- 문서를 무시하고 항상 사용하는
name()것이 왜 나쁜 생각 인지 설명해 주 시겠습니까? - "출시마다 다르지 않을 것"이라는 문구는 어떻습니까? 이름이 다르지 않다면 그것이 의미하는
java.lang.Enum.toString()것일까 요?
주요 차이점 name()과 toString()즉 name()A는 final그것이 무시 될 수 있도록하는 방법. 이 toString()메서드는 name()기본적으로 수행되는 것과 동일한 값을 반환 하지만 toString()Enum의 하위 클래스에서 재정의 할 수 있습니다.
당신이 필요로하는 경우 따라서, 현장 자체의 이름을 사용합니다 name(). 당신이 필요한 경우 필드의 값의 캐릭터 라인 표현을 사용합니다 toString().
예를 들면 :
public enum WeekDay {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY;
public String toString() {
return name().charAt(0) + name().substring(1).toLowerCase();
}
}
이 예에서는 WeekDay.MONDAY.name()"MONDAY"를 WeekDay.MONDAY.toString()반환하고 "Monday"를 반환합니다.
WeekDay.valueOf(WeekDay.MONDAY.name())반환 WeekDay.MONDAY하지만, WeekDay.valueOf(WeekDay.MONDAY.toString())을 던졌습니다 IllegalArgumentException.
사용자 (로그를 보는 개발자 포함)에게 정보를 제공 하려면 toString ()을 사용하십시오 . toString()특정 값 을 제공하는 데 코드에 의존하지 마십시오 . 특정 문자열에 대해 테스트하지 마십시오. 누군가가 toString()반환 값을 올바르게 변경할 때 코드가 깨지면 이미 손상되었습니다.
당신이 열거 형 정수를 선언하는 데 사용되는 정확한 이름을 얻을 필요가 있다면, 당신은 사용해야 이름 () 로 toString재정의되었을 수 있습니다.
toString사용자에게 이름을 표시해야 할 때 사용 합니다.
예를 들어 다른 열거 형 값을 식별하고 구별하기 위해 프로그램 자체 name의 이름이 필요할 때 사용 합니다.
'programing tip' 카테고리의 다른 글
| Pandas의 DataFrame에 필요한 메모리 양을 추정하는 방법은 무엇입니까? (0) | 2020.08.19 |
|---|---|
| powershell-파일 이름 및 확장자 추출 (0) | 2020.08.19 |
| Vim에서 NERDTree를 사용하여 파일 및 폴더의 이름을 바꾸거나 복사합니다. (0) | 2020.08.18 |
| 팬더 고유 값 여러 열 (0) | 2020.08.18 |
| Matplotlib를 사용하여 비 차단 방식으로 플로팅 (0) | 2020.08.18 |