2009-07-17 8 views
3

次のJavaコードはどうすればよいですか?java assertが奇妙な結果を返す

public class foo{ 
    public static void main(String[] args){ 
     boolean mybool=false; 
     assert (mybool==true); 
    } 
} 

これはアサーションエラーをスローする必要がありますか?なぜそうでないのであれば? (私はどんな誤りも得ていません!)

答えて

0

これはAssertionErorsを投げているはずです。

Eclipseを使用している場合は、アサーションをオンにする必要があります。デフォルトで無効になっています。

これを行うには、-eaをJVM引数に追加します。

+1

VMのランタイムに-eaを追加します。 –

+0

Bah ...誰でもチャンスを得る前に受け入れます。 – skaffman

+0

2人が答えられるチャンスを得ました... – jjnguy

4

プログラムを実行している場合、あなたは、コマンドラインに「-ea」を追加して、Java VMでアサーションを有効にする必要があります。

java -ea -jar myprogram.jar 
+1

ありがとう!それが必要なように働いて!超高速返信のための歓声! –

1

Java言語アサーションは奇妙です。あなたはコマンドラインを起動するときにそれらを有効にしなければなりません、そして、私はそれを好きではありません。

この理由から、私はアサーションを行うために第三者のライブラリを使用する傾向があります。 Apache Commons Lang(Validatorクラスを介して)、Spring(Assertクラス経由)またはJUnit4(Assertクラス経由)はすべてこの機能を提供し、VM設定に関係なく動作します。 Java5静的インポートを使用すると、java assertと同じように簡単に使用できます。また、柔軟性が高く、例外でエラーメッセージを指定することもできます。

+0

デフォルトは厄介ですが、下位互換性のためにあります。他にも、あなたはjavaアサーションでメッセージを指定することができ、使用されていないときにバイトコードから削除されることが保証されています。これは、生産パフォーマンスをあまり心配する必要がないことを意味します。私はこれが第三者のライブラリで可能であるとは思えません –

+0

しかし、現代のVMでは、これらのことを確認するためのパフォーマンスの低下はまったく重要ではありません。 – skaffman

+0

言語アサーションで大量のアサーションを使用し、運用環境でこれらのアサーションが削除されることがわかります。 アサーションはバイトコードから削除されず、VMはフラグに応じて実行時にそれらをコンパイルします。 –

0

これは、アサーションがプログラムでアクセス可能になっている場合に情報を作成します。

アサーションが無効(デフォルト)の場合、アサーション文は実行されず、myboolの値はfalseになります。

アサーションが有効な場合(jvm引数-ea)アサーションが実行され、副作用myboolがtrueに設定されます。

これを使用して、アサーションを有効または無効にすることができます。たとえば、アサーションが有効になっていないとテストが失敗し、テストを実行するときにアサーションが常にオンになるようにします。