Java 从json字符串解析时未调用对象构造函数
为什么未调用Java 从json字符串解析时未调用对象构造函数,java,json,gson,Java,Json,Gson,为什么未调用IACircle构造函数? 这就是我加载Json的方式 BufferedReader br = new BufferedReader(in); LevelDefinition ld = new Gson().fromJson(br, LevelDefinition.class); Json字符串 { "iaCircles": [ { "x": -32.0, "y": -5.0, "ang
IACircle
构造函数?这就是我加载Json的方式
BufferedReader br = new BufferedReader(in);
LevelDefinition ld = new Gson().fromJson(br, LevelDefinition.class);
Json字符串
{
"iaCircles": [
{
"x": -32.0,
"y": -5.0,
"angle": 0.0,
"radius": 2.5,
"density": 0.0,
"friction": 0.0,
"restitution": 1.0,
"textureSelection": "CIRCLE",
"inflictsDamage": true,
"fixedRotation":true
},
{
"x": 55.0,
"y": -5.0,
"angle": 0.0,
"radius": 2.5,
"density": 0.0,
"friction": 0.0,
"restitution": 1.0,
"textureSelection": "CIRCLE",
"inflictsDamage": true,
"fixedRotation":true
}
]
}
Java类解析为
public class LevelDefinition {
private Vector<IACircle> iaCircles;
}
您应该为类定义默认的无参数构造函数。GSON只调用无参数构造函数来初始化类。你有一个带参数的构造函数,这就是为什么不调用它;它创建一个
ObjectConstructor
来初始化。试试这个:
public class IACircle {
public IACircle () {
System.out.println("constructor called, circle");
}
}
+1.比我快。有关更多信息,请参阅此问题:为什么我仍然可以执行
System.out.println(iaCircles.get(0.csdamage))代码>并输出我在json中提供的值?即使没有参数构造函数called@bobbyrne01如果您不提供无参数构造函数,Gson无论如何都会找到一种方法,使用默认构造函数(无参数)创建一个类,并正确创建对象。但你应该提供它。
public class IACircle {
public IACircle () {
System.out.println("constructor called, circle");
}
}