This question already has answers here:
Non-static variable cannot be referenced from a static context
                                
                                    (12个答案)
                                
                        
                                2年前关闭。
            
                    
我试图用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(),该方法无法从静态上下文中检索。我对静态上下文的理解是,不能在不存在的对象上调用它。

最佳答案

您在存储方法和检索方法中创建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;
    }
}

09-04 06:23