`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 |