java - 序列化具有双向引用的对象时如何避免堆栈溢出?

标签 java libgdx

我的游戏中有我希望能够序列化为 JSON 的对象。问题是在它们具有指向“所有者”对象的指针时尝试序列化它们会导致堆栈溢出。

例如:

public class Entity
{

    Vector2 loc;
    Item item;

    public Entity(Vector2 loc)
    {

    this.loc = loc;
    this.item = new Item(this.loc, this);

    }

}


public class Item
{

    Vector2 loc;
    Entity owner;

    public Item(Vector2 loc, Entity owner)
    {

    this.loc = loc;
    this.owner = owner;

    }
}

如果我再打电话

Json json = new Json();
System.out.println(json.prettyprint(instanceOfEntity));

我遇到堆栈溢出。

我意识到这可能是一个架构问题,但我不确定解决它的最佳方法。这个问题的解决方案是什么?

最佳答案

Owner 字段设置为 transient 应该可以解决问题,并避免在序列化时出现循环引用:

public class Item
{
    Vector2 loc;
    transient Entity owner;

    public Item(Vector2 loc, Entity owner)
    {
        this.loc = loc;
        this.owner = owner;
    }
}

How does marking a field as transient make it possible to serialise an object

关于java - 序列化具有双向引用的对象时如何避免堆栈溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20550141/

相关文章:

java - 运行项目时请求的资源不可用

android - 你能在使用 LibGDX 时获得 Android MotionEvents

java - 动画两个固定点之间的平移 (Libgdx)

java - 如何使用 LibGDX 制作文本按钮?

java - 控制 Sprite 旋转(它疯狂地旋转)

java - Jaxb 中 int 变量的用法

java - UPDATE PreparedStatement 不使用 JDBC 更新 MSSQL

java - 如何使 Camel 路线线程安全?

java - 在不使用工作空间的情况下获取变更集中文件的路径

java - Robotium 与 libGDX 查找 imageButton 索引