java - 如何在 Kryonet 中注册 Enum 类?

标签 java networking enums kryonet

我正在尝试注册我的类(class)以便通过网络发送信息。我需要注册一个如下所示的 Enum 类:

public enum Fort{
    NOFORT("No Fort", 0, 0), TOWER("Tower", 1, 1), KEEP("Keep", 2, 2), CASTLE("Castle", 3, 3), CITADEL("Citadel", 4, 4);

    protected int combatValue;
    protected int income;
    protected String name;

    private Fort(String n, int c, int i){
        name = n;
        combatValue = c;
        income = i;
    }

    public int getFortIncome(){
        return income;
    }
    public int getComatValue(){
        return combatValue;
    }
}

我正在尝试通过网络发送整个游戏板,这要求我注册板内包含的所有子类。主要问题是我在尝试注册枚举时遇到了困难。

这就是我在网络类(class)中所做的事情:

    // tell Kryo what things it's going to have to send
    private void registerClasses(Kryo kryo) {
        kryo.register(Request.class);
        kryo.register(PacketMessage.class);

        kryo.register(Fort.class);
        kryo.register(ArrayList.class);
        kryo.register(Tile.class);
        kryo.register(Board.class);
    }

当我尝试注册 Fort.class 时,我收到一堆如下所示的错误:

        at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:504)
        at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:564)
        at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213)
        at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:504)
        at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:564)
        at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213)
        at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:504)

我是否错误地注册了我的枚举?关于如何正确执行此操作有什么想法吗?

谢谢!

最佳答案

我实际上没有在 kryo 中使用过枚举,但由于它们的值可以很大程度上简化为数字(序数),因此您可以编写自己的序列化器来实现这一点。不过我会研究一下,如果它能开箱即用,那就太好了。 顺便提一句。如果没有第一行说明抛出了什么异常,那么堆栈跟踪就没有多大用处。

关于java - 如何在 Kryonet 中注册 Enum 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22732121/

相关文章:

java - 在Java中将字符串转换为数组?

java - org.springframework.beans.factory.BeanCreationException : Error creating bean with name 'jdbcTemplate' defined in class path resource

networking - 处理丢失的 IPv6 连接的正确方法

c# - 解析枚举跳过已过时

java - hadoop-enum.valueOf-java.lang.IllegalArgumentException:没有枚举常量

java - 在特定日期的特定时间跳过 quartz 调度程序

java - 字符串的垃圾收集

networking - 可靠的udp广播库?

用于同步用户事件的 iOS 网络技术

java - 按参数迭代枚举