2012-08-15 2 views
0

조심하거나 방어적인 코딩 기술과 null 안전한 API 메소드를 적용하여 NullPointerException을 피할 수있는 가장 좋은 방법은 무엇이 있는지 알려주십시오. spceially 자바에서 코딩하는 동안, 내가 분석 한 한 가지는 null 체크를 넣어하는 것입니다 그리고 당신이 사용할 수있는 이클립스 편집기에 대한 조언도 할 수있는 모든 사용자 정의 템플릿입니다 !!널 포인터 예외 회피 안전 조치에 대해서

+1

뭔가를 방지하는 가장 좋은 방법은이 오가는있어 공부하는 것입니다

findNameForId(34) match { case Some(id) => id case None => throw new Exception } 

당신은 훨씬 더 간결 스칼라, 즉 할 수 있습니다. http://en.wikipedia.org/wiki/Pointer_%28computer_programming%29#Null_pointer http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception – CODe

답변

1
  1. 개체를 조작하기 전에 null 역 참조를 확인하십시오.

    if (something! = null) // do dome thing.

  2. null 디 레퍼런스를 해제하려면 yoda 표기법을 사용하십시오.

    경우 ("예".equals (일) // 무언가

이클립스 편집기 플러그인? 어쩌면 당신이 사용할 수있는 스타일의 체크.

4

글쎄, 당신은 함수를 호출하는 경우는 null 가능한 반환 값이므로 확인해야합니다. 반면에 어디에서나 null을 확인하면 너무 방어적이고 코드가 혼란 스럽습니다. 소스 코드 및/또는 javadoc에 액세스 할 수 있으면 함수가 null을 돌려 주는지,하지 않을지를 확인할 수있다.

값을 예상했지만 변수가 null 인 경우 예외가 발생하므로 NPE가 유용 할 수 있습니다. 다른 곳에서 오류가 있기 때문에 유용합니다.

또한 @NonNull이나 @Nullable과 같은 일부 주석은 일부 정적 분석 체커 (Findbugs와 같은)가 가능한 null 포인터 문제를 잡는 데 사용됩니다.

빌드중인 함수의 경우 null을 반환하는 것이 올바른지 확인하십시오. 예를 들어 함수가 컬렉션을 반환하면 빈 컬렉션을 반환하고 null을 반환하는 경우와 차이가 있습니다.

더 읽기 : Null Object Pattern

0

한 유용한 패턴은 옵션 패턴이다. 이것은 스칼라에서 널리 쓰이며, 자바에 상응하는 것에 대해서는 here으로 설명합니다.

간단히 말해서 객체에 대한 참조를 반환하는 대신 Option 객체를 반환합니다. 하나의 하위 클래스 (일부)는 참조를 포함하고 다른 하위 클래스 (없음)는 참조를 포함하지 않습니다. 따라서 API는 명시 적으로 사용자가 일 수 있습니다.은 값을 반환하지 않습니다. 너 을 가지고있어 기본 참조를 되찾기 위해 주어진 것을 결정합니다.

(의사 코드)

Option<String> value = findNameForId(34); 
if (value instanceof Some) { 
    return ((Some<String>)value).get(); 
} 
else { 
    throw new Exception(); 
} 

자바에서는 오히려 자세한 정보이지만 스칼라에서는 그렇지 않습니다.

findNameForId(34).getOrElse(throw new Exception) 

또는

findNameForId(34).getOrElse(DefaultValue)