您可以使用继承或使用接口来执行此操作,其中变量在父类中设置为常量.由于您要扩展JLabel,因此应在两个类上实现接口:
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());