2014-04-17 3 views
0

이 시나리오를 발견했을 때 Java 응용 프로그램을 구현했는데 어떤 이유로 더 나은지와 이유가 무엇인지 찾을 수 없었습니다. 다음은 시나리오입니다.정의로 초기화 목록

응용 프로그램 시작시 데이터를로드하는 정적 목록이 있습니다.

//Check if the list has been initialized or not 
if(ApplicationStartup.stockSymbolsListMap == null){ 

    ApplicationStartup.stockSymbolsListMap = new ArrayList<Map<String,Object>>(); 

    } else if(!(ApplicationStartup.stockSymbolsListMap.isEmpty())){ 

     // Clear the list to avoid redundancy 
     ApplicationStartup.stockSymbolsListMap.clear(); 

    } 

    // Adding all stock symbols to the list 
    while(allStockSymbols.hasNext()){ 
     ApplicationStartup.stockSymbolsListMap.add(allStockSymbols.next().toMap()); 
    } 

이 I하지 그것을 더 내 ApplicationStartup 클래스에서

나는

public static List<Map<String,Object>> stockSymbolsListMap; 

을 내 유틸리티 클래스에서 함수를 사용하여이 목록을로드 할 때 지금 나는 다음과 같은 코드가 있습니다 내 ApplicationStartup 클래스 자체에서이 목록을 초기화 하시겠습니까?

public static List<Map<String,Object>> stockSymbolsListMap = new ArrayList<Map<String,Object>>(); 

답변

1

목록이 정적이어서 클래스에 의해 호출되고 초기화 할 때 정적 코드를 사용하므로 초기화가 반복되지 않는다는 것을 알 수 있습니다. 따라서이 방법으로 초기화해야하는 이유는 무엇입니까? 그것은 나를 위해 정적 요소 대신 싱글 톤 빈을 사용하는 것을 선호합니다.

1

에 달려 있습니다. 귀하의 첫 번째 접근 방식은 lazy initialization과 유사합니다. 이는 유용 할 수 있습니다. 바로 stockSymbolsListMap이 필요하지 않은 경우 왜 초기화해야합니까? 반면에 초기화가 매우 저렴하다면 목록을 즉시 초기화하는 것이 좋습니다. 전반적으로 프로그램의 맥락에서 더 이해하기 쉬운 것, 그리고 앞으로 유지 관리가 가장 쉬운 것 중 무엇이든하십시오.