면담 & 보기: 자바 enums 대 공중 정체되는 마지막
Angsuman Chakraborty
2008년 9월 23
우리는 브라우저의 사용자 에이전트와 같은 일정한 끈을 대표하거나 단순히 전에로 공중 정체되는 마지막 끈을 이용하기 위하여 사용해야 하는가?
enum로 공중 정체되는 마지막을 사용하여 많은 문제가 있다:
- - 유형이 다만
int이기 때문에 typesafe 아닙니다 당신이 특정한 유형이 통과하고 요구되는, 또는 2가지의 유형을 수 있는 (이해되지 않는) 다른 어떤 int 가치에서 합칠. 이것은 그럼에도 불구하고 작동하는 것을 보이는지 당신이 비관련 장소에서 사용되는 이상한 불변의 것을 찾아낼 C 프로그램에서 단순히 특히 두드러지다, 때문에 필수 일정하고 제공한 일정한 몫 동일한 int 가치. - namespace 없음 - 당신은 끈에 다른 int enum 유형을 가진 충돌을 피하기 위하여 int enum의 불변의 것에 접두사를 붙여야 한다.
- 취성 - 그런 enums가 compile-time 불변의 것이기 때문에, 그(것)들을 사용하는 클라이언트로 집계된다. 새로운 불변의 것이 2개의 기존하는 불변의 것 사이에서 추가되거나 순서가 바뀌는 경우에, 클라이언트는 재컴파일되어야 한다. 그들이 이지 않는 경우에, 여전히 달릴 것이다, 그러나 그들의 행동은 확정되지 않을 것이다.
- 인쇄한 가치는 정보가치가 없을 지도 모른다 당신이 1개를 전부 프린트하는 경우에 (공중 정체되는 마지막 int에서 것과 같이), 당신은 - enum로 int로-이다 대표하는 무슨, 또는 유형 인 무슨에 관하여 당신에게 아무것도 말하지 않는 수 얻는다. 자바 enums에서 당신은 가치와 함께 가득 차있는 유형 정보를 얻는다.
(아래에서 설명되는) Typesafe Enum 본을 사용해서 이 문제의 주위에 얻는 것이 가능하다, 그러나 이 본에는 그것의 자신의 문제가 있다: 그것은 확실히 말이 많다, 그러므로 오류 빈발 및 그것의 enum 불변의 것은 스위치 계산서에서 사용될 수 없다.
이것은 불변의 것을 대표하는 종류를 사용하여 typesafe enum 본의 보기, 이다:
//The typesafe enum 본
공중 종류 한 벌 {
개인적인 마지막 끈 이름;
공중 정체되는 마지막 한 벌은 = 새로운 한 벌 ("클럽") 때린다;
공중 정체되는 마지막 한 벌 다이아몬드 = 새로운 한 벌 ("다이아몬드");
공중 정체되는 마지막 한 벌 심혼 = 새로운 한 벌 ("심혼");
공중 정체되는 마지막 한 벌 삽 = 새로운 한 벌 ("삽");
민간 소송 (끈 이름) {
this.name =name;
}
toString 공중 끈 () {
반환 이름;
}
}
enums를 가진 동일한 보기는:
공중 enum 한 벌 {클럽, 다이아몬드, 심혼, 삽}
그것은 간단하다 아니다 그것이?
enum로 끈을 대표하기 위하여는, 나는 사용하고 있다:
공중 enum UserAgent {
IE ("IE 사용자 에이전트"),
FIREFOX ("Firefox 사용자 에이전트");
userAgent 개인적인 마지막 끈;
개인적인 UserAgent (userAgent 끈) {
this.userAgent = userAgent;
}
toString 공중 끈 () {
반환 userAgent;
}
}
이것은 확실히 더 간단하지 않다:
공중 정체되는 마지막 끈 IE = "IE 사용자 에이전트"; 공중 정체되는 마지막 끈 FIREFOX = "Firefox 사용자 에이전트";
그러나 자바 enums로 나는 나가 알려지는 사용자 에이전트를 예상할 때 유형 안전 (사람들은 쓰레기를 약간 통과할 수 없다)와 유익한 유형을 얻는다. 당신은 동일을 달성하는 어떤 다른 이득 또는 간단한 방법을 보는가?
, 주요 뉴스, 어떻게 에, 프로그램하는 자바 소프트웨어 기업 소프트웨어의 밑에 신청하는 |
|
RSS 2.0 |
Trackback 이 기사 |
이 기사를 이메일을 보내십시오
당신은 또한 읽고 싶을지도 모른다 |




































2008년 9월 24일 8:55 AM에
enums로 당신은 UserAgent.values에 () 반복하고, 스위치 또는 케이스에서 그(것)들을 사용하고, enum에 있는 UserAgent 특정한 방법을 추가할 수 있다.
더구나, 당신은 당신이 enum로 "대표한ㄴ다고 끈을" 원한ㄴ다고 그러나 당신이 진짜로 enums로 사용자 에이전트를 대표하고 싶다는 것을 말한다. enums로 사용자 에이전트를 대표하는 것은 당신의 대안 보다는 훨씬 가동 가능하고 유익하다: 끈으로 사용자 에이전트 대표.
2008년 9월 24일 12:37 pm에
당신은 권리, 감사이다.