0

可以说我有两个类似的课程:

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";
}

现在在其他班级我使用其中之一:

public class Third {

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

但是我现在要做的是制作一种选择器,可以说类 Third 的构造函数获取布尔值并基于它选择使用哪个类,但我不想在任何地方都制作 if (..) 语句,因为它简直太多了。

所以抽象地说,我想要这样:

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

您可以使用带有 getter 方法的接口,然后让两个类实现该接口(并在调用 getter 方法时返回它们各自的值)。然后你可以创建一个映射来映射布尔值和两个实现类(通过接口),并调用映射到布尔值的对象。当然,这要求您为每个类创建一个对象,但您会得到相同的行为。

另一种选择是创建一个包装类,将if/else逻辑包装到自己的静态方法中,并根据布尔值从两个类中返回适当的值。虽然您需要为此包装类编写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 回答