2017-11-28 20 views
3

그래서 SonarLint에 접근하는 방법이 확실치 않은 문제가 있습니다. "Null 포인터를 참조 해제해서는 안됩니다 (squid : S2259)"규칙 문제?

이의 내가 sonarLint이 클래스 분석 할 때 내가하는 방법

public class Class(RemoteContext context) 
    RemoteContext context = context; 

    public void String method(String data) { 
     if(data == null) 
      context.raiseException("data can't be null"); 

     //do stuff with data like data.get(); 
    } 

을 가진 클래스가 있다고 가정 해 봅시다 (3.2.) 내가 널 포인터가 문제를 역 참조해서는 안 얻을.

내 질문은. 이 문제를 해결하는 방법? context.RaiseException은 메소드 실행을 중지하므로 거짓 긍정이라고 생각합니다.

응용 프로그램에는이 문제가있는 많은 사례 (클래스/메서드)가 있습니다. 그래서 주석이 잔인한 코드라고 생각합니다. 각 raiseException() 호출 후에도 입력 할 수 있지만 "프로그래머 방식"이 아닌 느낌입니다.

나는 내 규칙을 쓰는 것이 가장 좋을 것이라고 추측하고 있습니다.

저는 주제를 살펴보고 인터넷 검색을 해봤지만 실제로 소나가하는 것의 "반대"를해야 할 때 이런 경우에 유용한 것을 찾지 못했습니다. 문제를 제기하는 것이 아니라 그 방법에 "녹색 불빛"을주는 것입니까?

바라건대, 나는이 문제에 대해 충분히 분명히 밝혔습니다.

+0

'RemoteContext # raiseException' 메소드의 서명은 무엇입니까? –

+0

하나 이상. 정확히 6 개의 다른 것들 – user3219947

+1

위 중 하나만 사용되어 관련성이 있습니다. –

답변

5

RemoteContext 경우 제어 클래스, 당신은 정말, 내가 빌드로 RemoteContext을 바꿀 것 예외를 일반적인 new ExceptionType(...) 패턴을 사용하고 싶지만하지 않습니다하지 던져 그 다음

if (data == null) { 
    throw context.buildException("data can't be null"); 
} 

... SonarLint, Java 컴파일러, 그리고 나중에 코드에서 작업하는 프로그래머는 그 시점에서 중지됩니다 ("raise 예외"는 많은 것을 의미 할 수 있음).

(예 그것을 달성이 당신이이 장소의 많은 변경을 의미하지만, 비교적 간단하게 검색 및 바꾸기.)

+0

내 제어하에 있지 않습니다.이 접근법이 가능하지는 않습니까? – user3219947

+0

@ user3219947 : 글쎄, 그 시점에서 당신은 가난한 실천에 대한 해결 방법을하고 있습니다. 자바 컴파일러 인 SonarLint와 나중에 유지 보수를하는 사람들은 (raiseException 메소드 이름을 아는 추론을 제외하고) 메소드 실행이 거기에서 끝나는 지 알 수 없습니다. 'return;'을 추가하는 것은 차선책 인 것처럼 보인다. –

+1

내 생각에 줄을 서십시오 ... 먼저 대답을 읽었어야합니다 ;-) – GhostCat

2

정말이 문제를 해결하는 우아한 방법이 없습니다. 무엇합니까 작업 :

  • 당신의 유틸리티 메소드가 발생합니다 ...하지만 경우에는 것 "이중 잠금"와 같은 당신을 제공

    throw createAndThrow(); 
    

    :

    public SomeException createAndThrow() { 
        throw new SomeException(); 
    } 
    

    같이 사용하기 던지지 않음

  • 예외 객체가 반환된다고 가정하면 그 중 하나를 던져 버릴 수 있습니다.

C++과 같은 다른 언어도 표현할 수 있습니다.이 메서드/함수는 정상적으로 반환되지 않습니다. 그러나 Java는이를 제공하지 않습니다.

+1

우, 정말 똑똑하고 - 아마도 사악합니다. 나는 그것에 대해 더 생각할 필요가있다. :-) –

+0

물론 누군가가'return null '을하면 모든 것이 아주 추악한 방법으로 깨질 것이다. – GhostCat