2014-09-23 5 views
0

아래 코드는 javax.activation.DataHandler.getDataContentHandler, 1.41, 07/05/14를위한 코드입니다.dataContentHandler 멤버 변수가 javax.activation.DataHandler.getDataContentHandler에서 덮어 쓰여지고 있습니까?

메서드가 호출 될 때 dataContentHandler 멤버 변수가 null 인 경우 [1]의 if 절로 설정됩니다 (내 프로그램에서 발생).

그런 다음 [2]의 if 절에서 즉시 덮어 씁니다.

내가 누락되었거나 의도 한 동작이 될 가능성이 낮습니까?

private synchronized DataContentHandler getDataContentHandler() { 

    // make sure the factory didn't change 
    if (factory != oldFactory) { 
     oldFactory = factory; 
     factoryDCH = null; 
     dataContentHandler = null; 
     transferFlavors = emptyFlavors; 
    } 

    if (dataContentHandler != null) 
     return dataContentHandler; 

    String simpleMT = getBaseType(); 

    if (factoryDCH == null && factory != null) 
     factoryDCH = factory.createDataContentHandler(simpleMT); 

    if (factoryDCH != null) 
     dataContentHandler = factoryDCH; 

    if (dataContentHandler == null) { // [1] 
     if (dataSource != null) 
     dataContentHandler = getCommandMap(). 
       createDataContentHandler(simpleMT, dataSource); 
     else 
     dataContentHandler = getCommandMap(). 
       createDataContentHandler(simpleMT); 
    } 

    // getDataContentHandler always uses these 'wrapper' handlers 
    // to make sure it returns SOMETHING meaningful... 
    if (dataSource != null) // [2] 
     dataContentHandler = new DataSourceDataContentHandler(
            dataContentHandler, 
          dataSource); 
    else 
     dataContentHandler = new ObjectDataContentHandler(
          dataContentHandler, 
          object, 
          objectMimeType); 
    return dataContentHandler; 
    } 

나는

답변

1

내가 뭔가를 누락되었거나 가능성이 의도 된 행동 할 것입니다 있습니까?

// getDataContentHandler 항상 확인이 의미있는 반환 할이 '래퍼'핸들러 //을 사용하여 ...

: 그 코멘트에 따라 의도 된 행동이처럼

이 보이는

코드를 자세히 살펴보면 'dataContentHandler'가 'new DataSourceDataContentHandler'및 'new ObjectDataContentHandler'에 인수로 전달됩니다. 그것이 주석에 언급 된 '포장'입니다.

+0

아, 그래, 고마워, 나는 그것을 놓쳤다. –