2

次のコードで静的分析を実行すると:

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

次のエラーが表示されます。

"JAVA 0058 コンストラクター 'ExtractDBScripts' は super() を呼び出します".

super()コンストラクターからの呼び出しの何が問題になっていますか?

4

5 に答える 5

13

おそらく、これは完全に不必要だということです。これが Java のデフォルトの動作です (super が呼び出されます)。デフォルト以外のコンストラクターにパラメーターを渡す必要がある場合は、super() への明示的な呼び出しを使用します。

静的分析ツールは、混乱を減らすのに役立つ、まったく何もしないコードや不要なコードを指摘することがよくあります。また、a=a; も指摘します。a=a; と言って間違いはありません。しかし、実際には何もしていません。

于 2009-07-07T16:40:54.180 に答える
2

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

こちらの「サブクラスコンストラクタ」セクションを参照してください

于 2009-07-07T16:41:57.503 に答える
2

絶対に問題はありません-自分で宣言しない場合(つまり、宣言する必要がない場合)、コンストラクターの最初の行として暗黙的に存在しますが

于 2009-07-07T16:40:58.393 に答える
0

コンストラクターの最初の行である限り、コンストラクター内でsuper()を呼び出すことに問題はありません。ただし、非プライベートコンストラクターを持つクラスを実際に拡張している場合に限ります。

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

于 2009-07-07T16:41:36.737 に答える
0

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

于 2009-07-07T17:15:21.803 に答える