2016-10-22 12 views
0

私はJavaで簡単なGUIゲーム(数字の推測)を作成しています。別のクラスからプライベートインスタンス変数の値にアクセスするにはどうすればよいですか?

明らかに、私はGive Upと呼ばれるボタンを持っています。

ボタンGive Upをクリックすると、テキストエリアに回答が表示されます。

しかし、targetNumber変数はprivateとして宣言されています。

public class GameUtility { 
    private String targetNumber = "2543"; 

    //rest of the code 
} 

class GiveUpButton implements ActionListener { //Inner class 
    public void actionPerformed(ActionEvent gEvent) { 

     GameUtility utility = new GameUtility(); 
     textArea.append(utility.targetNumber); //How to access the value of targetNumber? 
    } 
} 

は、どのように私はプライベート変数の値にアクセスすることができますか?

+0

プライベートメンバやメソッドアクセサを必要とするだけで、独自のclass.You以内にアクセス可能です。その背後にある原則はカプセル化と呼ばれています。 –

+0

getter/setterメソッドを作成したくない場合は、[reflection](http://stackoverflow.com/questions/1196192/how-do-i-read-a-private-field- in-java)。これは汚れたハックであることに注意してください。 –

答えて

2

管理Bean accessibleの状態を作成するには、その状態のためsettergetterメソッドを追加する必要があります。

setterメソッドとgetter(accessor)メソッドが追加されたら、privateインスタンスの値を更新してアクセスできます。コードは、次の例のようになります。

public class AccessorExample { 
    private String attribute; 

    public String getAttribute() { 
     return attribute; 
    } 

    public void setAttribute(String attribute) { 
     this.attribute = attribute; 
    } 
} 

彼らは、我々はメソッドを呼び出します提供メカニズムを介して依頼する場合にのみ、クラスの外部からのアクセスにprivateインスタンス内の情報をまかせ。オブジェクトに自分自身に関する情報を公開するように求めるメカニズムは、getterメソッド(例:accessorExample.getAttribute();)と呼ぶことができます。

+0

setter/getterメソッドを1つに結合するのは良い考えですか? – Kcits

+0

このプライベートインスタンスを時間内に更新する必要がある場合は、同じクラス内でセッターメソッドも実装する必要があります。これは、カプセル化の原則(https://en.wikipedia.org/wiki/Encapsulation_(computer_programming))に関連しています。 –

2

private修飾子は、プロパティに直接アクセスできないことを示します。しかし、もっと重要なのは、privateは、に直接アクセスできないことを意味します。外部クラスへのアクセスを提供するためのgetterを作成します。また、

public class GameUtility { 
    private String targetNumber = "2543"; 

    public String getTargetNumber() { 
     return targetNumber; 
    } 

    //rest of the code 
} 

class GiveUpButton implements ActionListener { 
    public void actionPerformed(ActionEvent gEvent) { 
     GameUtility utility = new GameUtility(); 
     textArea.append(utility.getTargetNumber()); 
    } 
} 

参照:Java Documentation on Access Control

1

GettersSettersを適切に作成することをお勧めします。

See this post to get more insights as how do getters and setters work?

public class AccessorExample { 
    private String attribute; 

    public String getAttribute() { 
     return attribute; 
    } 

    public void setAttribute(String attribute) { 
     this.attribute = attribute; 
    } 
} 

のIDEのほとんどは直接getterssettersを生成するためのサポートを提供します。

  1. Generate Getters and setters in Netbeans.
  2. Generate Getters and setters in Eclipse.
関連する問題