java – 在GWT-RPC中使用嵌套的枚举

前端之家收集整理的这篇文章主要介绍了java – 在GWT-RPC中使用嵌套的枚举前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个枚举与嵌套枚举(我想要私有),但是当我这样做GWT告诉我,嵌套的枚举是不可见的并且引发异常.
public enum OuterEnum {
    A(NestedEnum.X),B(NestedEnum.Y),C(NestedEnum.X);

    NestedEnum nestedValue;
    private OuterEnum(NestedEnum nv) { nestedValue = nv; }

    private enum NestedEnum {
        X,Y;
    }
}

如果我从嵌套的枚举中删除私有修饰符,那么代码可以工作.为什么GWT不允许嵌套枚举的私有修饰符?有解决方法吗?

解决方法

序列化工作很好,至少你提供的例子.所有的枚举都是以下列方式进行序列化/反序列化(GWT 2.4,2.3,2.2):
public static OuterEnum instantiate(SerializationStreamReader streamReader) throws SerializationException {
            int ordinal = streamReader.readInt();
            OuterEnum[] values = OuterEnum.values();
            assert (ordinal >= 0 && ordinal < values.length);
            return values[ordinal];
}

    public static void serialize(SerializationStreamWriter streamWriter,OuterEnum instance) throws SerializationException {
            assert (instance != null);
            streamWriter.writeInt(instance.ordinal());
}

例如.我不管内部使用什么只有顺序通过网络.这意味着在其他地方有一个问题,GWT根本不在乎枚举内部是什么,因为它不是通过网络传输的(枚举应该是不可变的,不需要转移其状态).我认为你的问题可能是这样的:

public class OuterClass implements Serializable{

    private OuterEnum.NestedEnum nested;
    private OuterEnum outer;

    public enum OuterEnum {
        A(NestedEnum.X),C(NestedEnum.X);

        NestedEnum nestedValue;

        private OuterEnum(NestedEnum nv) {
            nestedValue = nv;
        }


        private enum NestedEnum {
            X,Y;
        }
    }
}

这个例子与上一个例子非常不同.假设在GWT-RPC服务中使用了OuterClass.由于NestedEnum用作OuterClass的字段,GWT需要为其创建一个TypeSerializer.但是由于TypeSerializer是一个单独的类,所以它没有任何对NestedEnum的访问权限(因为它是私有的).所以编译失败.

这基本上是你的例子不行的唯一的情况.在某些特定的GWT版本中可能会有一些错误,但我确信您的示例在gwt 2.2-2.4中有效.

猜你在找的Java相关文章