문제

누구든지 자바 콩 대신에 Enummap을 사용하는 것을 고려한 사람, 특히 "가치 객체"(동작이없는)? 나에게 한 가지 장점은 "속성"의 이름이 반사 할 필요없이 백킹 열거에서 직접 액세스 할 수 있다는 것입니다. 따라서 더 빠를 것이라고 생각합니다.

도움이 되었습니까?

해결책

그것 5월 반사를 사용한 다음 조금 더 빨리 있어야합니다 (나는 그것을 측정하지 않았고 Google에서 메트릭도 찾지 못했습니다). 그러나이 접근법에는 큰 단점이 있습니다.

  1. 당신은 유형 안전을 잃고 있습니다. 대신에 int getAge() 그리고 String getName() 모든것은 Object get(MyEnum.FIELD_NAME). 그것은 바로 못생긴 코드와 런타임 오류를 제공합니다.

  2. 우리가 사랑하고 즐기는 모든 Javabean의 멋진 (예 : 재산 수준의 주석)가 사라졌습니다.

  3. 당신은 전혀 행동을 가질 수 없기 때문에,이 접근법의 적용 가능성은 다소 제한적으로 보입니다.

결론은 - 당신이 진정으로 주장된다. Javabeans에 대한 실행 가능한 대안입니까? 가장 확실하지 않습니다.

다른 팁

Bean은 변이 가능하므로 세터 방법입니다. EnumMap은 정수가있는 해시 맵을 키로 사용하는 것과 비슷하지만 키는 불변입니다. 콩과 열거는 두 가지 다른 목적을 제공합니다. 모든 키가 설계 시간에 알려져 있고 절대 변경되지 않도록 보장되면 열거 형을 사용하는 것이 좋습니다.
Bean을 업데이트하는 것은 코드에서 다운 스트림 오류를 생성 할 가능성이 훨씬 적은 열거의 백업 열거를 변경하는 것보다 훨씬 간단합니다.

나는 완전히 동기화 된 Enummap에 위임하여 키를 값에 매핑하고 작동하는 레코드 클래스를 작성했습니다. 아이디어는 레코드가 런타임에 새로운 필드를 얻을 수 있지만 콩은 할 수 없다는 것입니다. 내 결론은이 유연성으로 성능이 히트한다는 것입니다. 레코드 클래스를 완전히 동기화 된 Bean과 비교하는 실행은 다음과 같습니다. 1 천만 건의 운영 :

Record  set(Thing, a)  458 ms
Bean    setThing(a)    278 ms
Record  get(Thing)     398 ms
Bean    getThing       248 ms

따라서 데이터 객체를 알고 정적으로 모델링하는 클래스를 작성하는 데있어 얻을 수있는 것이 있습니다. 런타임에 새 필드를 채취하려면 비용이들 것입니다.

열거로 '클래스 프로파일 링'을 제거 할 수있는 방법을 이해하지 못합니다. 모든 'Bean'에 대해 재사용 할 20 개 홀수 특성이있는 일반 열거가없는 한, 여전히 각 열거 맵에 사용할 열거를 발명하고 있습니다 (예 :

public enum PersonDTOEnum {
     A, S, L;
}

반대로

class Person {

    int a;
    int s;
    String l;

    // getters + setters elided
}

지금은 모든 것이 끈이라는 것은 말할 것도 없습니다.

이전에 이것을 지정하지는 않았지만 결과 세트로 작업하고 있습니다. 그러므로 나는 완전성을 위해이 답을 제공하고 싶습니다.

Commons/Beanutil 's "RowsetDynaclass" 콘크리트 콩과 관련된 과도한 보일러 플레이트 사이의 행복한 매체 일 수 있으며 열거의 한계

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top