gpt4 book ai didi

java - 在控制台上以 json 格式打印 Final Class

转载 作者:行者123 更新时间:2023-12-02 11:51:32 24 4
gpt4 key购买 nike

我正在尝试以 json 格式在控制台上打印带有静态字段的最终类。我正在使用 Eclipse。

Stats 是一个最终类,用于跟踪创建或存档的对象实例。例如。成员实例数、地点实例数等。

    public final class Stats {

public static Integer numMembers = 0;
public static Integer numLocalities = 0;
public static Integer numTowns = 0;

public static void incrementMembers () { numMembers ++; }
public static void incrementLocalities () { numLocalities ++; }
public static void incrementTowns () { numTowns ++; }
}

当我尝试以 json 格式打印时遇到了问题。它不将 Stats 识别为 Object 实例,这是可以理解的。有没有办法以 json 格式打印 Stats 类的当前状态?

public static void print () {

System.out.println(GsonBuilder().setPrettyPrinting().create().toJson(Stats));
}

最佳答案

您当前的方法不适用于 JSON(或任何其他)序列化,并且无法按照您想要的方式工作。

全局静态对象是一种反模式,因为它会在代码库中引入不必要的耦合。有两种方法可以解决这个问题,依赖注入(inject)和单例。在这两种情况下,您的“统计”对象都是具有非静态字段的普通对象。

public final class Stats {

private int numMembers = 0;
private int numLocalities = 0;
private int numTowns = 0;

public void incrementMembers () { numMembers ++; }
public void incrementLocalities () { numLocalities ++; }
public void incrementTowns () { numTowns ++; }

// Getters...
}

(不确定为什么使用Integer,这里没有必要)

依赖注入(inject)需要像Spring这样的框架。如果您还没有使用 Spring,那么一次性完成太多的变化和学习曲线可能让您无法承受。但从长远来看,这是最好的方法。对 DI 的解释超出了此处答案的范围,但原则是框架负责实例化对象并将其“注入(inject)”到需要的地方。

更轻量级的替代方案是“单例”模式(查找一下,它有详细的文档记录),其中对象包含一个静态成员引用,该引用指向您第一次访问它时创建的单个实例。

public final class Stats {
...
private static Stats instance = null;
public static Stats getInstance()
{
if (instance == null)
instance = new Stats();
return instance;
}
}

(以上内容比较简单,忽略了线程问题,使用前请研究一下模式)

然后,无论您需要引用您所做的(单个)Stats 实例

Stats stats = Stats.getInstance();

无论哪种情况,您都有一个可以序列化的真实实例

关于java - 在控制台上以 json 格式打印 Final Class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47848700/

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