java - 我怎样才能让两个类共享相同的变量定义

标签 java xml swing oop

我真正需要的是能够在接口(interface)中声明常规变量并在两个类中实现该接口(interface),这样我就不必在每个类中重新声明这些变量(即 class.data.variables 而不是 class .变量)。有什么方法可以让我以不同的方式实现相同的目标?

提供更多细节。本质上,我创建了一个小型绘图程序,它将 JLabel 放在 JScrollPane 上的 JPanel 上。因为我有这些 JLabel 的特定设计(即它们不只是用于绘图,它们代表此应用程序的航空公司对象),所以我有一个扩展 JLabel 并向其添加我的应用程序特定变量的类。最后,我用这些变量读写一个 XML 文件,这样他们就可以加载和保存他们的设计。因为我不能将这个扩展类用于我的 XML 定义,因为它会尖叫父类,即使我告诉它没有作为访问器(我读到有一个错误),我必须创建一个相同的类并将值复制回来来回保存和加载。问题不大,除非我将变量添加到 JLabel 扩展类而忘记将其添加到 XML 模拟类和后续复制例程。

所以,如果我可以创建一个类(比如 CellDataRecord.java)来保存额外的数据声明,并且让该类在两个地方(JLabel 扩展和 XML 数据)都使用而无需任何东西,那就太好了像 XML.data.CellDataRecordXXX。

最佳答案

您可以通过继承或使用接口(interface)来做到这一点,其中变量在父类中设置为常量。由于您正在扩展 JLabel,因此您应该在两个类上实现接口(interface):

public interface MyInterface {
    int someint = 9;
}

public class MyClass1 extends JLabel implements MyInterface {
    //this class has access to `someint`
}

public class MyClass2 extends JLabel implements MyInterface {
    // also has access to `someint`
}

编辑

由于您希望能够更改来自不同类的相同变量,因此您必须确保您没有更改副本并且正在更改相同的变量,因此您应该使用 volatile 关键字向 java 指示所有线程都应在更新值之前检查该值的变量。

现在您需要有一个单独的类,以便可以从其他类创建实例来获取值。您必须使用 static 关键字来确保为所有类实例保留一个副本。

public class MyVariableWrapper {
    public static volatile int some_var = 9;
    public void updateSomeVar(int newvar) {
         some_var = newvar;
    }
    public int getSomeVar() { return some_var; }
}

现在其他两个类只是这样做:

public class MyClass1 extends JLabel {
    MyVariableWrapper myVariableWrapper;
    MyClass1() {
        super();
        myVariableWrapper = new MyVariableWrapper();
        // now I have access to `some_var`
    }
}

public class MyClass2 extends JLabel {
    MyVariableWrapper myVariableWrapper;
    MyClass2() {
        super();
        myVariableWrapper = new MyVariableWrapper();
        // now I have access to the same `some_var` as MyClass1
    }

    // this is a wrapper method for your convenience
    // since you don't like the excess code when accessing the variable
    public int getSomeVar() {
        return myVariableWrapper.some_var;
        // or myVariableWrapper.getSomeVar();
    }
    public void setSomeVar(int newvar) {
        myVariableWrapper.some_var = newvar;
        // or myVariableWrapper.setSomeVar(newvar);
    }
}

现在你可以这样做了:

MyClass2 myClass2 = new MyClass2();
System.out.println(""+myClass2.getSomeVar());

关于java - 我怎样才能让两个类共享相同的变量定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10515769/

相关文章:

java - 从另一个类java中断循环

java - 使用 Spring OSGi 时,BundleActivator 无法解析为类型

xml - 将 XPath count() 与 contains() 一起使用

java - 将 HTML 内容设置为 JTextPane 会扰乱 System.out 重定向

java - 如何对字符串应用掩码?

php - 从 YouTube 视频中读取 XML

php - 使用命名空间前缀更新 XML 文件

java - 哪些 Swing 组件方法是线程安全的?

java - 重绘不会更新屏幕

java - 使用 jdk 1.6 时出现 SSLHandshake 异常