0

2つの類似したクラスがあるとしましょう:

public class First {

    public static final String ONE = "1";
    public static final String TWO = "2";
    public static final String THREE = "3";
}

public class Second {

    public static final String ONE = "one";
    public static final String TWO = "two";
    public static final String THREE = "three";
}

今、他のクラスでそれらの1つを使用しているIm:

public class Third {

    //....
    @Override
    public String toString()
    {
        System.out.println( First.ONE );
    }
}

しかし、私が今やろうとしているのは、一種のセレクターを作成することです。たとえば、クラスThirdのコンストラクターがブール値を取得し、それに基づいて使用するクラスを選択します。単に多すぎます。

要約すると、私はこれが欲しいです:

public class Third {

    //some global var with reference? to static class

    public Third(boolean first)
    {
        if( first ) {
           //set class First as source of static fields
        } else {
           //set class Second
        }
    }

    //....
    @Override
    public String toString()
    {
        System.out.println( globalVariableWithReference.ONE );
    }
}

これらのクラスのインスタンスを作成せずにそれは可能ですか?

4

2 に答える 2

2

ゲッター メソッドでインターフェイスを使用し、2 つのクラスにそのインターフェイスを実装させることができます (そして、ゲッター メソッドが呼び出されたときにそれぞれの値を返します)。次に、ブール値と 2 つの実装クラスの間を (インターフェイス経由で) マップするためのマップを作成し、ブール値にマップするオブジェクトを呼び出すことができます。もちろん、これには各クラスのオブジェクトを作成する必要がありますが、同じ動作になります。

もう 1 つのオプションは、if/elseロジックを独自の静的メソッドにラップするラッパー クラスを作成し、ブール値に基づいて 2 つのクラスから適切な値を返すことです。ifこのラッパー クラスの/ロジックを記述する必要がありますがelse、複数回記述する必要はなく、ラッパー クラスのメソッドを呼び出すだけです。

于 2012-05-18T12:13:41.783 に答える
0

リフレクションを使用できます:

Class x = if (first) First.class : Second.class;
String one = (String) x.getField("ONE").get(null);
于 2012-05-18T12:20:54.087 に答える