有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

{
    "origin": "XX.XX.XXX.XXX"
}

以下是我的三个主要课程的重要部分:

DDNS。爪哇

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

网。爪哇

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);  
}

数据。爪哇

public class Data {
    public String origin;

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

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


共 (1) 个答案

  1. # 1 楼答案

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

    我能想到的解决这个问题的最简单方法是更改Net#returnIp()以返回它在解析json时创建的Data

    //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);  
    }
    

    然后可以使用您创建的Data对象:

    //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语言的基础。你需要理解他们才能走得更远

    我建议阅读甲骨文的Object-Oriented Programming Concepts,从“什么是对象?”“什么是课堂?”链接