gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:49:21 27 4
gpt4 key购买 nike

关注此question on SO我遇到了问题。这是我要解析的 JSON:

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

以下是我的三个主要类(class)的重要部分:

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

数据.java

public class Data {
public String origin;

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

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

最佳答案

问题是您试图在主方法中访问 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语言来说是非常基础的。你需要理解它们才能走得更远。

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

关于java - Gson - 无法从静态上下文引用非静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24814420/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com