4

特定の条件が壊れている場合にJavaアプリがコンパイルされないようにして、何らかの形でコンパイルエラーをスローすることができるかどうか疑問に思っています。(私の場合、キャッシュの目的で、特定のパッケージ間のハッシュコード実装が一意の値を返すかどうかを確認したい)リフレクションを使用してmavenプラグインを作成することで可能であることはわかっていますが、残念ながらそれは私にとって解決策ではありません.

4

3 に答える 3

2
  1. あなたが説明した状況は、単体テストによって解決されます。単体テストは、コードのビルドまたは配信を防ぐことができますが、コンパイルされたコードが動作する必要があるため、もちろんコンパイルを止めることはできません。これらは非常に簡単にセットアップして Maven のビルドにバインドでき、Ant でも可能です。

  2. 私の知る限り、アスペクト指向プログラミングはコンパイル時間の制約を追加する可能性があります。これは、私が再質問した Java の質問に対するこの回答で簡単に説明されています。コンパイル時の制約。類推すると、AOP がパッケージの依存関係を強制できる場合、おそらく class を classFooに依存させることができBarますが、これはあなたの状況ですが、私は実際には AOP を知りません。

  3. #error繰り返しになりますが、より単純なケースでは、C プリプロセッサとマクロを使用しても、実際にはプリコンパイル ステップを追加するだけでかまいません。しかし、これは AOP の一部です。

  4. 静的アサートを追加して、ロード時にクラスが失敗するようにすることができます。これは、実行時 (一種) よりも前ですが、コンパイル時よりは遅いです。ロード時間の改善。繰り返しますが、単体テストは、この問題を実際に解決する方法です。

  5. 説明したように、pure Java を使用した実行時計算によってコンパイル時エラーが発生することはありません。

于 2013-06-25T14:31:07.593 に答える
1

保持したい不変条件のチェックをサポートするコンパイラが必要です。おそらくJastAddJなどの拡張可能なコンパイラ。

ほとんどのプロジェクトは、動作をチェックする単体テスト、またはfindbugsCoverityなどのツールを使用したコンパイル後の静的解析に依存しています。

Scala のような言語では、必要な不変条件を型システムにエンコードできる可能性があります。その場合、コンパイラ特定のサブクラスが契約に従っていることを確認できます。

于 2013-06-25T14:34:12.467 に答える