我可以将静态嵌套 class 分配给变量吗?

Can I assign a static nested class to a variable?

我为嵌套 类 内映射的某些控制器设置了一些不同的按钮布局。这是一个例子:

public class ControllerMap{
    public static class Type1{
        public static final int BUTTON_A = 1,
                                BUTTON_B = 2;
    }

    public static class Type2{
        public static final int BUTTON_A = 2,
                                BUTTON_B = 1;
    }   
}

我想创建一个变量来引用在我的代码中使用的变量。类似于 layout = ControllerMap.Type1;。我很确定这实际上是不可能的,但我还有其他方法可以做到这一点吗?

是的,您可以从任何地方引用它,因为您的 class 和 class 变量都 public 太像了:

int button = ControllerMap.Type1.BUTTON_A;//from anywhere and is resolved at compile time

但是如果你需要它运行时,你可以只注入适当的实例并创建 getter/setter 而不是直接暴露字段。

我认为您正试图以永远行不通的 OO 方式使用 'static'。在这种情况下,您可以使用策略模式来解决您的问题,但您必须调整您的代码。

使您的 class Type1 和 Type2 实现一个接口 (iController)。然后你可以在代码中的任何地方分配:

iController controller = new Type1();  

如果您希望将它们用作布局模板,您可以这样做:

public class Template
{
    public static final Template type1 = new Template(1, 2);
    public static final Template type2 = new Template(2, 1);

    public int buttonA;
    public int buttonB;

    public Template(int buttonA, int buttonB)
    {
        this.buttonA = buttonA;
        this.buttonB = buttonB;
    }
}

然后您可以像这样使用 layout 变量:

public static Template layout = Template.type1;