2011-03-08 16 views
7

テスト目的のために、私はしばしば既存のプロジェクトにいくつかのコードを入力し始めます。Javaコンパイラ:デッドコードについて不平を言わない

public static void main(String[] args) 
{ 
    char a = '%'; 
    System.out.println((int)a); 
    // To know where '%' is located in the ASCII table. 

    // But, of course, I don't want to start the whole project, so: 
    return; 

    // The real project starts here... 
} 

をしかし、コンパイラは、次の理由「デッドコード」の、return -statement文句:だから、私がテストしたい私のコードは次のように、他のすべてのコードの前に来ます。私はそれを嫌う

if (0 != 1) return; 

:(C++のコンパイラは、プログラマに従うと、単にreturn文コンパイルしながら)コンパイラを防止するために

は文句を、私は愚かなif -statementを書きます。なぜコンパイラは私が尋ねたことをすることができないのですか?私の問題を解決するためのコンパイルフラグや注釈などがありますか?

ありがとうございました

+3

私は外部クラスでテストを行うことをお勧めします、Junitテストは解決策になる可能性があります。 – reef

+1

@reef彼はユニットテストではなく「実験」を意味すると思います – Rup

+0

JavaはCとは異なるデザイン哲学を持っています。Cでは明示的に禁止されていないことはすべて許されています。問題)。 Javaは、意味を持たないことをしないようにしようとし、コードが実行されないことが分かっている場合は叫びます。それともそうであってもそうではありませんが、それはそうです。 –

答えて

10

この動作を有効にするフラグはありません。デッドコードをコンパイル時エラーにする規則はpart of the JLS (§14.21 Unreachable Statements)であり、オフにすることはできません。

このようなコードを可能にするループ内で明示的な抜け穴があります:

if (true) return; 

someOtherCode(); // this code will never execute, but the compiler will still allow it 

これは、(いくつかのstatic final booleanフラグに応じて)「コメント・アウト」または条件付きコンパイルを許可するように明示的にが行われます。場合

あなたは好奇心旺盛だ:抜け穴はif文の条件式の既知の定数値はif文の中や後にコードの到達可能性を確認するときはみなされないであるという事実に基づいています。同様の状況が既知の定数値が考慮されるwhile、で発生するので、このコードはコンパイルされません:私はこれを回避EINプロジェクトは、しかし、二つの方法

while (true) return; 

someOtherCode(); // this will be flagged as an unreachable statement 
+0

完璧な答え。 –

1

あなたは死んでタラの多くを持つべきではありませんプロトタイピングのために。

コードをコメントアウトするには、/ * * /を使用します。

// But, of course, I don't want to start the whole project, so: 
    /* 
    // The real project starts here... 


    */ 
} 

を作成するか、2番目の方法を作成してください。

// But, of course, I don't want to start the whole project, so: 
    // realProject(); 
} 

public static void realProject() 
    // The real project starts here... 
} 
+1

"/ * * /'を使用して "死んだ"コードをコメントアウトすることはお勧めしません。これはIDEには見えないコードにつながります。 "参照の検索"では見つからず、リファクタリング構文のハイライトなどは表示されません。私は 'if(false){}'をクリーンな解決策として「死んだ」コードをラップすることがわかりました。長期的には、すべてのデッドコードを削除して、バージョン管理システムのみで履歴を有効にすることはもちろんです; –

+0

Intellijはコメント付きコードをリファクタリングすることでかなり優れています(コメントにコードがあると不平を言います)。ただし、通常は削除することが最善の方針です。 –

+0

IDEAはこれを行いますか?それはきちんとしていますが、やや壊れやすいと思います。 JavaDocのコードサンプルについても不平を言っていますか? –