如何用字符串中的名称实例化变量? [重复]

问题描述 投票:0回答:1

试图通过构造函数更好地理解 Swing 和 AWT,但现在我有一个关于构造函数的问题。

基于布尔值maximize是否为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;

我知道编译器以某种方式做事,只是如果我放在这里的内容没有反映出这一点,就不要把我活活吃掉。

java variables reflection constructor
1个回答
1
投票

Reflection 查看类和字段定义,并使您能够动态实例化类(通过变量名)。它不允许您动态定义字段或类。

正如 Hovercraft 所说,您可能需要一个 参考

使用变量使您能够引用所需的对象,然后设置现有的“属性”/或应用您想要的行为。

例如:

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

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

public static boolean isFrameMaximized (JFrame frame) {
    if ((frame.getExtendedState() & JFrame.MAXIMIZED_BOTH) == JFrame.MAXIMIZED_BOTH)
        return true;
    return false;
}
© www.soinside.com 2019 - 2024. All rights reserved.