2017-04-24 22 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

這將編譯,但這不會做任何有用的事情 - 他需要他以前存儲過的類的* old *實例。 –

+0

好的,編輯後看起來更好。 –

1
  1. 你不需要storeEndpointArnretrieveEndpointArn方法爲storeEndpointArngetArnStorage你正在嘗試通過storeEndpointArnretrieveEndpointArn分別實現什麼。您可以嘗試直接在實例上調用那些getterssetters,而不是在storeEndpointArn中創建一個對象,並設置該值(它不會完成您希望它執行的操作)。

  2. 至於staticnon-static方法而言,你不能叫一個instance方法與類名,唯一的方法static可以這樣調用。看看this文章static vs non-static方法。

相關問題