2009-07-07 3 views
2

는 다음 코드 정적 분석을 실행하면 :Java()의 생성자에서 super()를 사용하는 것이 잘못된 이유는 무엇입니까?

public ExtractDBScripts(String resBundleName) 
    { 
     super(); 
     m_mainBundle = ResourceBundle.getBundle(resBundleName); 
    } 

나는 다음과 같은 오류 얻을 : 생성자에서 super()를 호출 뭐가 문제

"JAVA 0058 Constructor 'ExtractDBScripts' calls super()".

를?

+1

어떤 정적 분석 도구를 실행하고 있습니까? 설명을 위해 문서를 확인해보십시오. –

답변

13

아마 그것은 완전히 불필요합니다. 즉, 자바의 기본 동작 (그것은 당신을 위해 슈퍼를 호출합니다)입니다. 기본이 아닌 생성자에 매개 변수를 전달해야하는 경우 super()에 대한 명시 적 호출을 사용하려고합니다.

정적 분석 도구는 혼란을 줄이는 데 도움이되는 코드가 전혀 없거나 불필요한 코드를 종종 가리 킵니다. 또한 a = a; a = a를 말하면서 아무 잘못이 없습니다; 하지만 실제로 아무 것도하지 않습니다.

그것으로
+0

사실이 아닙니다. 생성자는 명시 적으로 호출하기 위해 매개 변수화 할 필요가 없으며 그렇게하기 위해 컴파일러 오류가 발생하지 않습니다. – amischiefr

+0

그러나 정적 분석 도구는 불필요한 코드임을 경고 할 수 있습니다. –

2

절대적으로 아무것도 잘못된 - 그것은 생성자의 첫 번째 라인으로 암시가 있지만 당신이 그것을 직접 선언하지 않으면 아무 문제가 없습니다

0

(예를 선언 할 필요가 없습니다) constructor에서 첫 번째 라인 인 한 생성자 내에서 super()를 호출합니다. 실제로 비공개 생성자가있는 클래스를 확장하는 경우에 한합니다.

확장하려는 클래스가 하나의 생성자 만 갖고 있으며 비공개이면 super()를 호출 할 수 없습니다.

2

필자는 사용중인 도구가 필요하지 않기 때문에 해당 코드 줄을 객관적으로 추측합니다. 제거하면 컴파일러에서 자동으로 삽입합니다.

"하위 클래스 생성자"섹션 here을 참조하십시오.

0

의도적으로 코드에서 super()를 호출하여 다른 코더가 원하는 것을 분명히 할 것을 제안합니다. 그것은 내가 일하고 이해하는 것처럼 보이는 프로그래밍 실습의 일부입니다. 소프트웨어에 따라 super()에 대한 호출을 무시하도록 정적 분석 도구를 설정하는 방법이있을 수 있습니다. IntelliJ에는 정적 분석을 할 때 특정 사항을 무시하는 주석이 있습니다.

+0

어떻게 슈퍼를 호출하는 것을 중단합니까? 당신이 그것을 막을 수 없다면 왜 코드를 넣는가? –