2011-09-01 2 views
1

게으른 초기화/계산 패턴에 도움이되는 "표준"클래스 (JDK, Guava, Apache *)가 있는지 궁금합니다.대중적인/표준 Java 라이브러리의 어딘가에 느리게 계산 된 값을위한 클래스가 있습니까?

나는 이런 식으로 뭔가에 대해 생각하고 있어요 (의 지금은 동기화를 무시하자) :

abstract class Lazy<T> { 
    T instance = null; 
    protected T compute(); 
    final T get() { 
    if (instance == null) instance = compute(); 
    return instance; 
    } 
} 

//... 

Lazy<Foo> foo = new Lazy<Foo> { 
    protected Foo compute() { return Foo.expensivePart(); } 
} 

//... 

Bar bar = foo.get().getBar(); 

답변

1

내가 바로 당신을 이해한다면, Lombok이 하나의 주석 @Getter(lazy=true)와 함께 일을 할 것입니다.

(롬복은 또한 @Delegate, @EqualsAndHashCode, @Synchronized과 같이 매우 유용한 특수 효과를 제공합니다).

+0

감사합니다. 이것은 간결하고 자동적이며 이중 체크 관용구를 사용하기 때문에 Effective Java Item 71 은 현명하게 지연 초기화를 사용합니다. 더 이상 적용되지 않습니다. – DaveFar

+1

롬복의 기능 (http://projectlombok.org/features/index.html)이 Java 7 (예 : 다이아몬드 운영 업체로 인해 val)로 인해 구식인지 궁금합니다. – DaveFar

+0

@DaveBall 나는 롬복의 모든 특징을 좋아하지 않는다. 그러나 그들 중 일부는 매우 깔끔합니다. 몇 주 전에 StackOverflow에 대한 제안으로 발견되었습니다. 놀아도 좋지만 프로젝트가 아직 프로덕션에서 사용하기에는 충분히 성숙하지는 않습니다. 그러나 이것은 단지 제 의견이며 어쩌면저기서이 게으른로드를하는 것을 알아내는 데 도움이 될 것입니다. 어쩌면 마이클이 그걸 취해서 그와 비슷한 것을 쓴다. –

관련 문제