2017-01-22 8 views
0

他のすべてのクラスで変数を使用したいと考えています。あるクラスでその変数を変更し、その新しい値を他のクラスで使用できます。他のクラスで変更され使用される変数を持つjava

class A{ 
boolean val = false; 
} 

class B{ 
val = true; 
} 

class C{ 
    if(val){ 
    //do something 
    } 
} 
+0

これを行わないでください。代わりに 'A'クラスにメソッドを作成してから、これらを呼び出して変数を変更する必要があります。メソッドにアクセスするには、 'A a = new A();'を使って 'A '型のオブジェクトを作成する必要があります。 – marstran

+0

ここでこの質問を参照してください:http://stackoverflow.com/questions/4983056/how-to-share-a-variable-across-classes-in-java-i-tried-static-didnt-work –

+0

静的変数@ David Sam – Sreemat

答えて

-1

グローバル値を検索しています。カプセル化の必要性を損なうことなく

public class A { 
    public static boolean a = false; 
} 

public class B { 
    public void yourmethod() { 
     //Do something with A.a 
    } 
} 
+0

しないでください。あなたはあなたのプログラムでグローバルな状態を望んでいません。オブジェクトに適切に状態をカプセル化し、メソッドでアクセス/変更します。 – marstran

+0

@marstran、実際に私は何度もやりました。アプリケーションレベルの設定を定義してメモリに格納するには、複数の正当なケースがあります。クラス、メソッド、メンバーを一般的に定義しようとするのは間違いありませんが、一般的にはこれを適用すべきだと思います。 Aが設定と呼ばれ、そこに一般的なアプリレベルの設定がある場合、私は何の害も見ません。もしあなたがそうしたら、このコメントに対するあなたの答えに具体的に記述するようお願いします。 –

+0

少なくとも、ゲッターとセッターを使ってアクセスしてください。これが基本的なJavaの規約です。なぜグローバルな状態が悪いのか、この答えを見てください:http://softwareengineering.stackexchange.com/a/148109 – marstran

0

はJavaでは、あなたが望むものを達成することができます:あなたはこのようclasspublic staticメンバーを定義することができます。 varaiableを持つクラスのgetterとsetterを作成し、それらのgetterとsetterを使って他のクラスの変数にアクセスします。

class A{ 
private boolean val = false; // private modifier needed for encapsulation 
public void setVal(boolean val){ 
    this.val = val 
} 
public boolean isVal(){ 
    return val; 
} 
} 

class B{ 
    //val = true; instead of this, try this------> 
    new A().setValue(true); // use setter to set the value. 
} 

class C{ 
    if(new A().isVal()){ //use getter here to get the value 
    //do something 
    } 
} 

他のクラスの中で直接変数を使用することを避ける理由は、変数が不適切である可能性が常にあるということです。 getterとsetterを使用すると、変数を完全に制御し、望ましくない値が入力されないように変数を操作できます。

関連する問題