如何使用字符串中的名称实例化变量?

时间:2014-06-02 23:59:48

标签: java variables reflection compiler-construction constructor

尝试使用构造函数更好地理解Swing和AWT,但现在我对构造函数有疑问。

根据布尔最大化是否为 true ,我想设置一个具有相同值的新公共布尔变量。事情是我可能需要多个JFrame但我不能创建相同的公共变量名称,如果为true。 如何使用基于动态字符串的名称实例化布尔值

public void setJframe(JFrame name,  boolean maximize,) {

        if (maximize == true){
            name.setExtendedState(name.getExtendedState()|JFrame.MAXIMIZED_BOTH);
        }
        else {
            name.setLocationRelativeTo(null);
        }
}

额外澄清

if 部分中,如果它可以远程实现,就会发生类似情况。 括号用于表示整个变量名称,并在与字符串混合的反射内

public boolean (getField(name) + "Max") = maximize;

我知道编译器会以某种方式做某些事情,如果我放在这里并没有反映出来,那就不要活着。

1 个答案:

答案 0 :(得分:1)

反思观点课程&字段定义,使您能够动态地实例化类(通过变量名称)。它不允许您动态定义字段或类。

正如Hovercraft所说,你可能想要一个参考

使用变量可以引用所需的对象,然后设置现有的属性' /或在其上应用所需的行为。

例如:

public void setupJFrame (JFrame frame, boolean maximize) {
    if (maximize) {
        frame.setExtendedState( frame.getExtendedState()|JFrame.MAXIMIZED_BOTH);
    } else {
        frame.setLocationRelativeTo(null);
    }
}

如果你需要知道' JFrame'它处于什么状态,您可以将其子类化以添加存储该属性的属性,或者(或许更好)只是制作一个“吸气剂”。或者静态的“吸气者”使用它的现有状态来回答这个问题的实用方法。

public static boolean isFrameMaximized (JFrame frame) {
    if ((frame.getExtendedState() & JFrame.MAXIMIZED_BOTH) == JFrame.MAXIMIZED_BOTH)
        return true;
    return false;
}