java - 在使用 GSON 反序列化 JSON 的对象类中制作字段/构造函数 PRIVATE 或 PUBLIC 或 NEITHER?
问题描述
我编写了一个简单的程序,它从 OpenWeatherMap API 检索天气数据并将 JSON 响应反序列化为对象。其中一个对象称为 CurrentForecast。这是该课程的一个片段:
public class CurrentForecast {
String name;
long dt;
LocationCoord coord;
List<WeatherObject> weather;
MainInfo main;
WindInfo wind;
public static class LocationCoord {
Double lon;
Double lat;
public LocationCoord(Double lon, Double lat) {
this.lon = lon;
this.lat = lat;
}
}
public static class WeatherObject {
String description;
public WeatherObject(String description) {
this.description = description;
}
}
public static class MainInfo {
Double temp;
Double temp_min;
Double temp_max;
Double pressure;
Double humidity;
public MainInfo(Double temp, Double pressure,
Double humidity) {
this.temp = temp;
this.pressure = pressure;
this.humidity = humidity;
}
CurrentForecast 类中嵌套了几个类。CurrentForecast 和嵌套类的字段未设置为私有或公共。我也没有包含用于 CurrentForecast 的构造函数来初始化“name”和“dt”。我还注意到,如果我不包含其他嵌套类的构造函数,那么 JSON 数据就可以反序列化。
我的问题是,我是否将 CurrentForecast 和嵌套类的字段设置为私有并包含 get 方法?我是否还必须包含构造函数,或者我可以把它们去掉吗?
希望获得有关如何正确设置我的对象类(特别是在主驱动程序中使用 GSON 反序列化 JSON 数据)和改进我的编程风格的输入。谢谢!
解决方案
您应该将字段设置为私有并包含 getter 吗?
没有必要,特别是如果其他人不打算使用您的代码,但我认为这样做是一个好习惯,因为它有助于保持整洁。由你决定!显然要记住情况;如果您有一个变量,您只希望它所在的类可以访问它,请将其设为私有。
你必须包括构造函数吗?
如果您在实例化类时不需要运行一些代码(当您从类创建新对象时),则无需创建构造函数,因为 Java 将为您创建一个默认(非参数化)构造函数。
我对 GSON 和反序列化 JSON 数据了解不多,但我认为在这种情况下,getter 和 setter 将有助于快速设置和获取不同的变量,而不会让代码变得过于混乱。
希望有帮助!
推荐阅读
- lotus-notes - LotusNotes - 视图列字段引用更改的问题。有人经历过吗?
- javascript - 是否可以在 AMP 表单中使用 php 函数填充隐藏字段的值
- apache - 将方案重定向到 https 并继续路径规则
- python - 使用来自 Anaconda 的 Python 的 VSCode 中的 PowerShell 问题
- module - 找不到我为 python 3.7 下载的模块
- sql - SQL PostgreSQL - 比较顺序行以确定更改和开始/结束日期
- php - Laravel:如何允许带有 .php 文件扩展名的路由
- c++ - 返回值按函数不变
- angular - 单元测试中未使用组件的属性填充表单
- swift - containerAppExtensionEntitlementsWithCompletion:失败并出现错误:(null)