提供更多细节.基本上,我创建了一个小型绘图程序,它将JLabel放在JScrollPane上的JPanel上.因为我对这些JLabel有一个特定的设计(即它们不只是用于绘制它们代表此应用程序的航空公司对象),我有一个扩展JLabel的类,并将我的应用程序特定变量添加到它.最后,我使用这些变量读取和编写XML文件,以便加载和保存他们的设计.因为我不能将这个扩展类用于我的XML定义,因为它对父类感到尖叫,即使我告诉它将NONE作为访问者(我读到有一个bug),我必须创建一个相同的类并复制值用于保存和加载.除了向JLabel扩展类添加变量并忘记将其添加到XML模拟类和后续复制例程之外,没有太多问题.
因此,如果我可以创建一个包含额外数据声明的类(比如CellDataRecord.java)并且在两个地方都使用该类(JLabel扩展和XML数据)而不必使用类似XML的东西,那将是很棒的. data.CellDataRecordXXX.
解决方法
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());
原文地址:https://www.jb51.cc/java/129981.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。