2013-06-21 2 views
8

Netbeans IDEは、問題を引き起こす可能性のあるコードを検出するのに適しています。Netbeans IDEはコンストラクタで呼び出されたメソッドについて警告を出さない

public class Base 
{ 
    Base(...) 
    { 
     ...; 
    } 

    public void foo() 
    { 
     ...; 
    } 
} 

public class Child extends Base 
{ 
    Child(...) 
    { 
     super(...); 
     foo(); 
    } 
} 

私が子コンストラクタで基本クラス関数foo()を呼び出しているという理由で、警告が発行されないのはなぜですか?もちろん、foo()が呼び出されるポイントによって基本オブジェクトが構築されるので、完全に合法ですが、foo()は暗黙的に仮想メソッドなので、はfoo()がfinalとマークされていない限り、実際には私は期待します。

finalとマークされていない子クラスのコンストラクタから基本クラスの関数を呼び出すと、IDEが警告を出すべきだと思います。

+0

あなたは 'foo()'が抽象であることを意味しますか? 'abstract void foo();'? – NINCOMPOOP

+0

全くありません。実装されています。私は明確にするために質問を編集します。 – Bathsheba

+0

バグだと思う場合は、問題を提出することを検討してください:https://netbeans.org/community/issues.html – Puce

答えて

2

です。
ファイルをNetBeansで開くと、fooの呼び出しの横に黄色の電球(ヒントインジケータ)が表示されます。それはあなたのいずれかの提案です:

  • 最終子供はあなたはそれがより明白になりたい場合は、Tools > Options、またはEdit > Preferencesに行く

、fooが最終確認し、民間、または静的作る、またはNetbeans > Preferences(お使いのOSによって異なります)。
今ラインだけでなく、あなたのファイルは赤、エラーバッジを取得しますInitialization
選択Problematic call in the constructor
変更Show as
Errorへ]をクリックしOK

を展開
Javaに設定LanguageHints
を選択してくださいEditor
を選択します。 。

注:これはどれもは、あなたがインジケータを無視しないように注意してください。コードはまだ正当なJavaですので、NBはあなたのコンパイルを妨げません。

関連する問題