首页 > 解决方案 > 在使用 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 数据)和改进我的编程风格的输入。谢谢!

标签: javajsonoopstylesgson

解决方案


您应该将字段设置为私有并包含 getter 吗?

没有必要,特别是如果其他人不打算使用您的代码,但我认为这样做是一个好习惯,因为它有助于保持整洁。由你决定!显然要记住情况;如果您有一个变量,您只希望它所在的类可以访问它,请将其设为私有。

你必须包括构造函数吗?

如果您在实例化类时不需要运行一些代码(当您从类创建新对象时),则无需创建构造函数,因为 Java 将为您创建一个默认(非参数化)构造函数。

我对 GSON 和反序列化 JSON 数据了解不多,但我认为在这种情况下,getter 和 setter 将有助于快速设置和获取不同的变量,而不会让代码变得过于混乱。

希望有帮助!


推荐阅读