【问题标题】:How to instantiate variable with name from a string? [duplicate]如何从字符串中实例化具有名称的变量? [复制]
【发布时间】:2014-06-02 23:59:48
【问题描述】:

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

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

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 不允许动态变量名,但更重要的是,您不想这样做,因为变量名几乎没有那么重要正如你认为的那样。重要的是参考。

标签: java variables reflection compiler-construction constructor


【解决方案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;
}

【讨论】:

  • 谢谢我喜欢这个答案。您能否在编辑中详细说明第二个解决方案,例如您是否会如此亲切?
猜你喜欢
  • 1970-01-01
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多