>시스템 튜토리얼 >리눅스 >예외를 발생시키지 않는 여러 Java 열거 조회 구현의 장점과 단점 비교

예외를 발생시키지 않는 여러 Java 열거 조회 구현의 장점과 단점 비교

PHPz
PHPz앞으로
2024-01-03 13:24:56590검색
소개 Java Enum은 매우 유용한 기능이지만 일부 라이브러리에서는 이 기능을 우선시하지 않기 때문에 많은 사람들이 이를 최대한 활용하지 못하는 경우가 많습니다. 일반적으로 Java 열거 함수를 올바르게 사용할 수도 있지만 많은 코드 베이스에서 이러한 문제가 종종 발생하므로 이 문서를 작성합니다. 질문은 간단합니다. 어떻게 이름이나 값으로 열거형을 얻고 존재하지 않는 값을 무시해야 할까요?
열거

이것은 예제에서 사용할 열거형입니다. 조회 열거가 다른 필드로도 표시될 수 있도록 더 복잡한 열거가 선택됩니다.

으아악

GitHub에서 확인하세요.

질문

입력이 유효하다는 것을 알고 있는 경우 Enum.valueOf를 사용하는 것이 좋습니다. 그러나 잘못된 이름이 전달되면 예외가 발생합니다. 어떤 경우에는 괜찮습니다. 그러나 일반적으로 예외를 무시하고 null을 반환하는 것이 좋습니다.

으아악

으아악 잘못된 구현

안타깝게도 다음 두 가지 메소드가 코드 베이스에 너무 자주 등장합니다. 부정적인 예에서 배우지 마십시오.

Enum.valueOf with Try Catch(나쁨)

이 잘못된 습관은 초보자에게 가장 흔합니다. 제어 흐름에 예외를 사용해서는 안 되며 성능에 어느 정도 영향을 미칠 수 있습니다. 게으르지 마십시오. 올바른 방법으로 해야 합니다.

으아악

으아악

으아악 반복으로 찾기(하위)

이 방법도 매우 일반적이지만(여기 참조), 적어도 프로그래머는 try/catch를 사용하여 예외를 잡을 수 없다는 것을 알고 있습니다. 그렇다면 이 접근 방식에는 어떤 문제가 있나요? 맞습니다. 일치하는 열거형을 찾을 때까지 모든 열거형을 반복하거나 최악의 경우 null - n 번을 반환합니다. 여기서 n은 열거형 값의 수입니다. 어떤 사람들은 이것이 사소하고 시기상조인 최적화라고 생각할 수도 있습니다. 그러나 데이터 구조와 알고리즘은 CS의 기초입니다. 컬렉션을 반복하는 대신 맵을 사용하는 것이 훨씬 덜 힘듭니다. 이렇게 하면 성능이 크게 향상됩니까? 아니요, 하지만 들어가는 것은 좋은 습관입니다. 후보자를 인터뷰할 때 선형 복잡도 검색 알고리즘이 마음에 드시나요? 이 시점에서는 이러한 코드 검토를 통과해서는 안 됩니다.

으아악

으아악

으아악 더 나은 구현

다음은 모두 Map 형식의 인덱스를 사용하여 작동할 수 있습니다. 그러나 그들 사이에는 몇 가지 미묘한 차이점이 있습니다.

정적 지도 색인(더 좋음)

고정 크기를 빠르게 조회하기 위한 올바른 데이터 구조는 무엇인가요? 그것이 바로 해시맵이다. 이제 몇 가지 추가 상용구를 사용하면 좋은 해시 함수가 있는 경우 더 효율적인 조회를 수행할 수 있습니다. 약간 더 장황하지만 상용구를 줄일 수 있는 방법이 있다면 좋을 것입니다.

으아악 으아악 으아악 Guava Enums.getIfPresent(권장)

이것은 일반적인 사용 사례이며 Google의 친구들은 이에 대한 매우 깨끗하고 상용구가 없는 솔루션을 가지고 있습니다. 이를 살펴보면 WeakReferences 및 WeakHashMaps도 사용합니다. 기본적으로 이 코드는 Enum 클래스 이름으로 입력된 전역 정적 맵을 생성하고 이를 조회에 사용합니다.

으아악 으아악 으아악 필드별 추가 색인 생성

열거형의 다른 필드에도 이와 똑같은 방법을 사용할 수 있습니다. 표시된 이름이나 기타 속성으로 열거형을 찾는 것은 드문 일이 아닙니다.

필드별로 색인화된 정적 지도(더 좋음)

위와 같은 방법이지만 열거형 이름 대신 표시 이름을 인덱싱합니다.

으아악 으아악

으아악 필드별로 색인화된 정적 지도(더 좋음)

정적 인덱스에 대한 고유한 전역 키를 생성하는 것이 어렵기 때문에 여기에서는 Guava를 활용할 수 없습니다. 하지만 그렇다고 해서 우리에게 도움이 없다는 뜻은 아닙니다!

으아악

이제 우리는 상용구와 거의 관련이 없는 보편적인 솔루션을 갖게 되었습니다.

으아악 으아악 으아악 결론

여기에는 동일한 문제를 해결하는 데 사용할 수 있는 여러 가지 방법이 있습니다. 일부는 나쁘고 일부는 더 좋습니다.

원문 영어 텍스트: 예외를 발생시키지 않고 이름 또는 필드로 Java Enum 조회

번역 작성자: MaNong.com – Xiaofeng

위 내용은 예외를 발생시키지 않는 여러 Java 열거 조회 구현의 장점과 단점 비교의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 linuxprobe.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제