2012-08-14 2 views
0

Java에서이 이상한 것을 발견했습니다. 코딩하는 동안 실수로 Map을 인스턴스화하는 것을 잊었습니다. 데이터를 퍼팅하는 동안 모든 것이 오류가 없었습니다. 그러나 그것을 얻었을 때 나는 명백한 NullPointerException을 얻었습니다. 다음은 내가 사용한 코드 조각입니다.데이터를 null에 넣습니다.

public class Loader { 
    private static Map<String, Object> map; 
    public static load() { 
     //... 
     // read lines and put them into map 
     map.put(line, new Object()); // <-- NO ERROR 
     //... 
    } 

    public static parse(){ 
     //... 
     for(...){ 
      map.get(key); //<-- ERROR on map (NullPointerException) 
     } 
     //... 
    } 
} 

제공된 코드는 스텁이며 이상한 맵 동작을 보여주기위한 것입니다. 그렇다면 왜 null에 데이터를 삽입 할 수 있습니까? Java * 1.6.0_29 *를 사용하고 있습니다.

이 코드는 완전하며지도는 초기화되지 않습니다. 코드가 완료되었습니다.

+6

a) map.put에 도달 할 때까지 map이 null이 아니거나 b) 그 행을 실행하지 않아도됩니다. – assylias

+4

왜'load' 메소드가 호출 된 것 같습니까? – Roman

+0

'map.put'과'map.get' 앞뒤에'sysout'을하면 어떨까요? –

답변

0

나는 어리 석다. @assylias가 지적했듯이, put이 발생하지 않는 코드는 결코 실행되지 않습니다. 그것은 이전 버그로 인해 실행되지 않았던 각주기마다 상당히 깊었습니다. 나는 부끄럽다.

0

간단히 말해서이 작업을 수행 할 수 없습니다. 나는 그 대신에 map.put() 동안 던져진 예외가 어딘가에을 삼켜 버렸다는 것을 의심하고 당신은 그것을 보지 못하고있다.

try { 
    (new Loader).load(); 
} 
catch (Exception e) { 
    // swallowed with no info here 
} 
0

이 코드는 아직 완성되지 않았습니다. 또는 코드의 이전 컴파일 버전을 실행 중일 수 있습니다.

0

사용중인 IDE 또는 JDK에 문제가 있거나 해당 코드가 될 수 있습니다. 사용자의 케이스를 복제하려고 할 때 java.lang.Error 예외가 컴파일 타임에 해당 메시지와 함께 발생했기 때문에 변수 맵이 초기화되지 않았습니다.

0

"지도"가 인스턴스화되었거나 "입력"행에 도달 할 수 없습니다.

관련 문제