我可以将静态嵌套 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;
我为嵌套 类 内映射的某些控制器设置了一些不同的按钮布局。这是一个例子:
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;