Java get / set类在静态上下文中不可访问

时间:2017-04-24 19:33:19

标签: java class getter-setter

我正在尝试使用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);
    }
}

要存储String,我使用以下(这可行)

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

但是,要检索String,我尝试以这种方式检索它

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

但是,这会返回一个非静态方法getArnStorage(),该方法无法从静态上下文中检索。我对静态语境的理解是,它不能被称为不存在的东西。

3 个答案:

答案 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 :(得分:1)

您需要保持并使用相同的引用来存储和检索字符串

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

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

答案 2 :(得分:1)

  1. 您不需要storeEndpointArnretrieveEndpointArn方法,因为storeEndpointArngetArnStorage完全符合您要通过storeEndpointArn和分别为retrieveEndpointArn。您可以尝试直接在实例上调用getterssetters,而不是在storeEndpointArn内创建对象并设置值(无论如何都不会执行您想要的操作)。

  2. staticnon-static方法而言,您无法使用类名调用instance方法,只能使用static方法像这样叫。请查看staticnon-static方法的this文章。