8

テストの目的で、既存のプロジェクトにコードを入力し始めることがよくあります。したがって、テストしたいコードは、次のように他のすべてのコードの前にあります。

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について文句を言います。(C ++では、コンパイラーはプログラマーに従い、returnステートメントをコンパイルするだけです)

コンパイラが文句を言うのを防ぐために、私は愚かなステートメントを書きifます:

if (0 != 1) return;

私はそれが嫌いです。なぜコンパイラは私が求めることを実行できないのですか?問題を解決するためのコンパイルフラグや注釈などはありますか?

ありがとう

4

2 に答える 2

10

この動作を無効にするフラグはありません。デッド コードをコンパイル時エラーにするルールは 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、既知の定数値考慮されるため、このコードはコンパイルされません。

while (true) return;

someOtherCode(); // this will be flagged as an unreachable statement
于 2011-03-08T09:46:36.087 に答える
1

プロジェクトに死んだタラがたくさんあるべきではありませんが、プロトタイピングのためにこれを回避する2つの方法があります。

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

    // 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...
}
于 2011-03-08T10:04:15.553 に答える