2009-07-07 4 views
2

私は次のコードの静的解析を実行すると:Javaのコンストラクタでsuper()を使用すると何が問題になりますか?

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

私は次のエラーを取得する:

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

コンストラクタからsuper()を呼び出すと間違って何ですか?

+1

実行中の静的解析ツールは何ですか?説明のために文書をチェックしてみてください –

答えて

13

多分それは完全に不要です - それはjavaのデフォルトの動作です(それはあなたのためにスーパーを呼び出すでしょう)。デフォルト以外のコンストラクタにパラメータを渡す必要がある場合は、super()を明示的に呼び出す必要があります。

静的解析ツールでは、何もないコードを指摘したり、混乱を減らすのに役立たない場合があります。また、a = aを指摘します。 a = aと言っても何の問題もない。実際には何もしていません。

それに
+0

それは当てはまりません。コンストラクタは明示的に呼び出すためにパラメータ化する必要はなく、そうすることでコンパイラエラーは発生しません。 – amischiefr

+0

しかし、静的解析ツールは、それが不必要なコードであることを警告することができます。これは起こっていることです。 –

2

絶対に何も間違っ - それは、コンストラクタの最初の行として暗黙のうちにありますが、あなたはそれを自分で宣言しない場合は何も問題はありません

0

(すなわち、それを宣言する必要はありません)コンストラクタ内の最初の行である限り、コンストラクタ内でsuper()を呼び出すことは、非プライベートコンストラクタを持つクラスを実際に拡張している限りです。

拡張するクラスにコンストラクタが1つしかなく、プライベートな場合はsuper()を呼び出すことはできません。

2

あなたが使用しているツールは、必須ではないので、そのコード行に反対していると推測します。削除すると、コンパイラはそれを自動的に挿入します。

サブクラスのコンストラクタのセクションhereを参照してください。

0

目的に応じてコード内でsuper()を呼び出すことをお勧めします。そうすれば、他のコーダーにはあなたがしたいことが分かります。それは私が働いているプログラミングのプラクティスの一部であり、理にかなっているようです。静的解析ツールを設定して、ソフトウェアによってはsuper()への呼び出しを無視する方法もあります。 IntelliJには、静的解析を行うときに特定のものを無視するための注釈があります。

+0

どうやってスーパーを呼び出すのをやめますか?それを防ぐことができない場合は、コードを混乱させるのはなぜですか? –

関連する問題