Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Gson-无法从静态上下文引用非静态变量_Java_Gson - Fatal编程技术网

Java Gson-无法从静态上下文引用非静态变量

Java Gson-无法从静态上下文引用非静态变量,java,gson,Java,Gson,在这之后,我遇到了一个问题。这是我试图解析的JSON: { "origin": "XX.XX.XXX.XXX" } 以下是我的三个主要课程的重要部分: java public static void main(String[] args) throws Exception { Net.returnIp(); System.out.println(Data.origin); } Net.java static void returnIp() throws Unsuppo

在这之后,我遇到了一个问题。这是我试图解析的JSON:

{
    "origin": "XX.XX.XXX.XXX"
}
以下是我的三个主要课程的重要部分:

java

public static void main(String[] args) throws Exception {
    Net.returnIp();
    System.out.println(Data.origin);
}
Net.java

static void returnIp() throws UnsupportedEncodingException, MalformedURLException, IOException {
    //Ommited code, all it does is do a GET request to get response
    String responseString = new Scanner(response,"UTF-8").useDelimiter("\\A").next();

    Data data = new Gson().fromJson(responseString, Data.class);  
}
Data.java

public class Data {
    public String origin;

    @Override
    public String toString() {
        return String.format("ip:%s", origin);
    }
}

除非我忽略了答案中的某些内容,否则我不能完全确定我做错了什么,尽管我有一个粗略的想法。有人能解释一下为什么会这样吗?谢谢。

问题在于,您试图在主方法中访问
数据的非静态成员,而实际上没有对
数据
对象的引用

我能想到的解决此问题的最简单方法是更改
Net#returnIp()
以返回解析json时创建的
数据

//Net.java
static Data returnIp() throws UnsupportedEncodingException, MalformedURLException, IOException {
    //Ommited code, all it does is do a GET request to get response
    String responseString = new Scanner(response,"UTF-8").useDelimiter("\\A").next();

    return new Gson().fromJson(responseString, Data.class);  
}
然后,您可以使用已创建的
数据
对象:

//DDNS.java
public static void main(String[] args) throws Exception {
    Data data = Net.returnIp();
    System.out.println(data);  // this will automatically call data's toString() and format its origin
}
对象的概念是Java语言的基础。你需要了解他们才能走得更远


我建议阅读oracle的,从“什么是对象?”和“什么是类?”链接开始。

origin
不是静态的。
@user3580294是的,我可以做到这一点,但我对Java非常陌生,不完全理解静态对象。我不能只声明它是静态的,那么我该如何修复它呢?谢谢你的意见。azurefrog说了什么。如果类成员不是静态的,则需要通过类的实例访问它。所以你需要从某处获取一个
数据
对象。@azurefrog你能提供一个例子来回答吗?作为Java的真正新用户,这已经超出了我的理解范围。看来我还有更多的学习要做。我已经把我的评论转换成了答案,这样我就有足够的空间来解释事情了。