を格納擬コードとして提供パス定数クラス引数と
スニペットは、擬似コードとして解釈されるべきです。私は、この問題を解決するために標準の方法である別の解決策があるかどうかを知っています。
これは、予想される使用についてです:
いくつかの明確化:
- ひとつ、そして唯一の設定は、アプリケーションごとに使用されます。実行時には変更されません。
Main.java
@Override
を許可していません。Configuration.java
は、デフォルト値はオーバーライドされていないフィールドに指定する必要があるため、Interface
にすることはできません。Configuration.java
は、現在の2つのフィールドからかなり大きくなります。ビルダーパターンを非常に乱雑にレンダリングして作業してください。
Configuration.java
public class Configuration
{
public static int getFoo() { return 1; }
public static int getBar() { return 2; }
}
UserDefinedConfiguration.java
public class UserDefinedConfiguration extends Configuration
{
@Override
public static int getFoo() { return 3; }
}
Main.java
public final class Main {
private final Configuration config;
// default configuration
public Main() {
this (Configuration.class);
}
// user-defined configuration
public Main (Class<? extends Configuration> config) {
this.config = config;
}
// dummy-test
public void printFoo() {
System.out.println(config.getFoo());
}
}
今、主な質問に、これを達成する方法は?いいえ(またはConfiguration
が渡された場合)getFoo()
はが3
の場合は1
を返します。
これを達成する1つの方法は、Configuration
のインスタンスを格納することです。ただし、すべてのゲッターがstatic
の場合、はと重複しているように感じます。 static
のようなものを持っていないのはあまり意味がありません。
'それは静的either.'としてそれらを持っていないためにあまり意味がありません - なぜありませんか?異なる構成セットを使用したいと思うので、各構成セットを1回だけ作成することを前提としています。したがって、非静的メソッドの「オーバーヘッド」(ある場合)と構成の1つのインスタンスの作成は重要ではありません。また、自動的にクリーンなソリューションで '@ Override'を取得します。 –
複数の 'Configuration'を持つことは意味がありません。メソッドは 'Configuration'に直接属します。私は本当に "オーバーヘッド"について心配していません。 – Emz
設定値はコードで保存する必要がありますか?代わりに、プロパティファイルまたはハッシュマップの階層を作成し、後で読み込まれる値が以前の値を上書きすることもあります。継承をクラス/インタフェースとしてモデル化する必要はありません。推測すると、おそらく私は質問を完全に誤解している... –