2009-07-07 2 views
2

Wenn ich statische Analyse auf den folgenden Code ausführen:Was ist falsch an der Verwendung von super() in einem Konstruktor in Java?

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

ich die folgende Fehlermeldung erhalten:

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

Was super() von einem Konstruktor mit Aufruf falsch ist?

+1

Welches statische Analysewerkzeug verwenden Sie? versuchen Sie, die Dokumentation für eine Erklärung zu überprüfen –

Antwort

13

Wahrscheinlich nur, dass es völlig unnötig ist - das ist Javas Standardverhalten (es wird Super für Sie nennen). Sie möchten den expliziten Aufruf von super() verwenden, wenn Sie einen Parameter an einen nicht standardmäßigen Konstruktor übergeben müssen.

Ein statisches Analyse-Tool wird oft auf Code hinweisen, der absolut nichts tut oder unnötig ist, um Unordnung zu vermeiden. Es wird auch auf a = a hinweisen; Es ist nichts falsch daran, a = a zu sagen; aber es macht eigentlich gar nichts.

+0

Das ist nicht wahr. Der Konstruktor muss nicht explizit um parametriert wird es zu nennen, und es wird sicherlich nicht einen Compiler-Fehler zu tun, so werfen. – amischiefr

+0

Aber statische Analyse-Tools können Sie warnen, dass es unnötig Code ist, das, was geschieht. –

2

absolut nichts falsch mit ihm - auch wenn es implizit dort als erste Zeile eines Konstruktor ist, wenn man es selbst nicht erklären (dh es gibt keine Notwendigkeit, es zu erklären)

0

Es ist nichts falsch mit Aufruf super() in einem Konstruktor, solange es die erste Zeile in Ihrem Konstruktor ist, solange Sie tatsächlich eine Klasse erweitern, die einen nicht privaten Konstruktor hat.

Wenn die Klasse, die Sie bauen nur einen Konstruktor hat, und es ist privat, dann können Sie nicht super() aufrufen.

2

Ich nehme an, das Werkzeug, das Sie verwenden, widerspricht dieser Codezeile, weil es nicht erforderlich ist - wenn Sie es entfernen, wird der Compiler es automatisch einfügen.

Siehe Abschnitt "Subclass Constructors" here.

0

Ich würde vorschlagen, super() in Ihrem Code absichtlich zu nennen, so dass es für andere Programmierer offensichtlich ist, was Sie tun möchten. Es ist Teil der Programmierpraxis, in der ich arbeite und scheint sinnvoll zu sein. Es gibt möglicherweise eine Möglichkeit für Sie, das statische Analysewerkzeug so einzurichten, dass Aufrufe von super() auch abhängig von der Software ignoriert werden. IntelliJ enthält Anmerkungen zum Ignorieren bestimmter Dinge, wenn es statische Analysen durchführt.

+0

Wie hörst du damit auf, super zu telefonieren? Wenn Sie es nicht verhindern können, warum sollte der Code durcheinander gebracht werden? –

Verwandte Themen