tl;dr:
特定のオブジェクトの変数を列挙するための最適なパターンと、これらの変数が取る可能性のある範囲を探しています。次に、特定の変数設定に基づいてオブジェクトを構成したいと考えています。
長いバージョン:
過去に作成したいくつかの醜いハックをクリーンアップしようとして、古いコードを調べています。私は素晴らしい機械学習とデータマイニングのライブラリを持っています。このライブラリにはさまざまな統計モデル (およびその他のコンポーネント) があり、十分なデータが与えられた場合 (トレーニングと呼ばれます)、数学的最適化を通じて独自のパラメーターの多くを学習できます。ただし、入力の 1 つとしてトレーニングの前に設定される他のパラメーター (ハイパーパラメーター) があります。ハイパーパラメータは、多くの有効な設定を選択し、それぞれのモデルを構築し、勝者を選択することで「調整」できます。このプロセスで再帰を使用して、いくつかのハイパーパラメータを調整できます。
問題:
ハイパーパラメーター (より一般的にはオプション) を適切に処理するための効果的なシステムに必要なコンポーネントは次のように思われます。
- すべての異なるタイプ (enum、float、boolean など) のすべての異なるオプション、有効な値の範囲などを列挙する静的変数。これらは、各オプションのデフォルト値を格納することもできます。
- 構成を取り、このオプション設定でオブジェクトを構築するコンストラクター。
- あると便利: たとえば、.properties、gnu cli、または yaml から「構成」を作成する機能。
私が直面している問題:
ここでの主な問題の 1 つは 1) のようです。Javaには、静的抽象変数をサポートするための実際のメカニズムがありません。これにより、「構成可能」インターフェースを実装する特定のクラスが独自のデフォルト構成実装を格納することを強制できなくなります。これを回避する良い方法はありますか?
親のデフォルト構成は、サブクラスに渡される必要があります。
構成オブジェクトを受け取るコンストラクターを作成できますが、これを拡張して、この構成の明示 (cli、yaml、.properties) も受け取るようにするのは少し面倒です。
stackoverflow が提供できるこの問題への取り組みについてアドバイスをいただければ幸いです。私はこれについてしばらく考えていましたが、現時点では美しいコードではなく、醜いハックしかありません。