2017-04-24 9 views
1

Javaでget/setクラスを作成しようとしています。しかし、後でクラスからデータを取り戻すことができません。静的コンテキストでJava get/setクラスにアクセスできない

public class ARNStorage { 
    String arnStorage; 

    public String getArnStorage() { 
     System.out.println("Got endpoint: " + this.arnStorage); 
     return arnStorage; 
    } 
    public void setArnStorage(String arnStorage) { 
     this.arnStorage = arnStorage; 
     System.out.println("Saved endpoint: " + this.arnStorage); 
    } 
} 

文字列を格納するために、私は文字列を取得するために、しかし

public void storeEndpointArn(String endpointArn) { 
    ARNStorage endPoint = new ARNStorage(); 
    endPoint.setArnStorage(endpointArn); 
    System.out.println("Storing endpoint: " + endpointArn); 
} 

(この動作)以下を使用し、私はこの、しかしこのよう

public String retrieveEndpointArn() { 
    String endPointArn = ARNStorage.getArnStorage(); 
    System.out.println("Retrieved endpoint: " + endPointArn); 
    return endPointArn; 
} 

それを取得しよう静的コンテキストから取得できない非静的メソッドgetArnStorage()を返します。私が静的な文脈を理解することは、それが存在しないものには呼び出すことができないということです。

+1

非静的メソッドを使用する場合は、 'ARNStorage'クラスのインスタンスを作成する必要があります。 –

+0

なぜ値を取得するためにARNStorageの新しいインスタンスを宣言する必要がありますか?インスタンスはすでにstoreEndpointArn()に作成されています – Iorek

+0

あなたはそうしていません。しかし、その古いインスタンスを使用する必要があります。 –

答えて

2

ローカル変数ARNStorageを保存メソッドに作成し、取得メソッドではARNStorageインスタンスを使用せず、クラス自体を使用します。
意味がありません。
どちらの場合もインスタンスを使用し、と同じを使用する必要があります。

これを実現するには、ARNStorage endPointをクラスのインスタンスフィールドにする必要があります。別のメソッドから再利用する場合は、ローカル変数ではありません。例えば

、あなたが持っている可能性があり:

public class ClientClass{ 

    private ARNStorage endPoint; 

    public void storeEndpointArn(String endpointArn) {  
     endPoint = new ARNStorage(); 
     endPoint.setArnStorage(endpointArn); 
     System.out.println("Storing endpoint: " + endpointArn); 
    } 

    public String retrieveEndpointArn() { 
     String endPointArn = endPoint.getArnStorage(); 
     System.out.println("Retrieved endpoint: " + endPointArn); 
     return endPointArn; 
    } 
} 
1

あなたはホールドを維持し、文字列を格納および取得するために同じ参照を使用する必要があります。

ARNStorage endPoint = new ARNStorage();//endPoint is the reference to the object 
endPoint.setArnStorage(endpointArn); 

String endPointArn = endPoint.getArnStorage();//use endPoint to retrieve data 
+1

これはコンパイルされますが、これは何も役に立ちません。以前に何かを保存していたクラスの*古い*インスタンスが必要です。 –

+0

OK、編集後に見栄えが良いです。 –

1
  1. storeEndpointArngetArnStorageはあなたがそれぞれstoreEndpointArnretrieveEndpointArnを通じて達成しようとしているまさにそうであるようにあなたはstoreEndpointArnretrieveEndpointArn方法を必要としません。オブジェクトとsettersstoreEndpointArnの中にオブジェクトを作成し、値を設定するのではなく、インスタンスに直接呼び出すことができます(これはやりたいことを実行しません)。

  2. 限りstaticnon-static方法が懸念しているとして、あなただけのstaticメソッドは次のように呼び出すことができ、クラス名とinstanceメソッドを呼び出すことはできません。 staticnon-staticの方法についてはthisの記事をご覧ください。

関連する問題