質問: マルチアプリケーション環境でのenumの処理 私たちの会社は主にJavaで開発され、共有された参照データと列挙型に依存するいくつかの「ライブ」システム(主に長時間実行されるサーバープロセス)をサポートしています。時々列挙型定義が新しい値を含むように展開されます。この場合、アプリケーションがそれぞれすべてのライブラリjarを含むプライベート "lib"フォルダを持っているという理由で、現在はすべてのアプリケーションを**再配備**します。 "enum entity"ライブラリを含む)。明らかにこれは望ましくないので、私は他の人々の勧告やアプローチを聞くことに興味があるでしょう。 私が考えたアイデア: 1. 各アプリケーションの起動スクリプトを変更して、最新の "enum entity"ライブラリのバージョンを取得し、jarファイルをclasspathの前に追加します。 2. 実行時に新しい列挙型定義を動的にクラス分けするためのある種のメカニズム。 これらのアプローチの問題点は、アプリケーションでは通常、次の形式のコードがあることです。 ``` switch(enumVal) { case A: //Do something. break; case B: //Do something. break; default: throw new IllegalArgumentException("Invalid enum value: " + enumVal); } ``` ...そして、彼らがデフォルトのケースに当たったときに失敗し始めるでしょう。おそらくこれは、これらのエンティティが列挙型であってはならないことを示唆しています。私たちの場合は本当に便利なトレードオフです。あるいは、単にアプリケーションが脆弱であり、デフォルトのケースをより上手く処理する必要があることを示唆するだけのものかもしれません。
回答: スミスさんはそうです。列挙型や古い列挙型の定数を拡張することはほとんどできませんが、通常は良いアプローチではありません。 あなたが暗示するように、新しい列挙値には、それを使用するクライアントによる特殊な動作/処理が必要です。列挙を変更すると、クライアントも*変更*する必要があります。これは本当に悪いことです。実際に別の方法で再設計しようとしています。