これは、継承またはインターフェイスを使用して行うことができます。この場合、変数は親クラスの定数として設定されます。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
て、すべてのクラスインスタンスに対して1つのコピーが保持されるようにする必要があります。
public class MyVariableWrapper {
public static volatile int some_var = 9;
public void updateSomeVar(int newvar) {
some_var = newvar;
}
public int getSomeVar() { return some_var; }
}
これで、他の2つのクラスはこれを実行します。
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());