不能将enum类型转换为short,反之亦然

时间:2016-09-09 03:25:56

标签: java enums

在一个班级中我有这段代码

public class RPCMessage implements Serializable{
 public static final short REQUEST = 0;
 public static final short REPLY = 1;
 public enum MessageType{REQUEST, REPLY};
 private MessageType messageType;

 public MessageType getMessageType() {
     return messageType;
 }
 public void setMessageType(MessageType messageType) {
     this.messageType = messageType;
 }
}

我尝试访问它的另一个类,但它在那里给我错误。 错误代码:

int buffSize = c.lenInBytes();
        ByteBuffer bb = ByteBuffer.allocate(buffSize);
        short typeNum = (short) c.getMessageType();
        int index = 0;
        bb.putShort(0,typeNum);
        index+=2;

设置相同属性时也出错

RPCMessage c = new RPCMessage();
              ByteBuffer bb = ByteBuffer.wrap(mData);
              int index = 0;

              c.setMessageType(bb.getShort(index));
              index += 2;

我是Java编程的新手。这个你能帮我吗。在此先感谢:)

1 个答案:

答案 0 :(得分:2)

在您的情况下,实施不合适。

我将尝试详细说明Enums的使用: 你的RPCMessage课应该是这样的:

public class RPCMessage implements Serializable {
    //public static final short REQUEST = 0; // Not required
    //public static final short REPLY = 1; // Not required

    public enum MessageType {
        REQUEST((short)0),

        REPLY((short)1);

        private short enumVar;

        private MessageType(short var){
            enumVar = var;
        }
    };


    private MessageType messageType;

    public MessageType getMessageType() {
        return messageType;
    }

    public void setMessageType(MessageType messageType) {
        this.messageType = messageType;
    }


}

您的第二个代码段应如下所示:

//int buffSize = c.lenInBytes();
//ByteBuffer bb = ByteBuffer.allocate(buffSize);
short typeNum = (short) c.getMessageType().enumVar; // Only tested this line 
//int index = 0;
//bb.putShort(0,typeNum);
//index+=2;

您的第三个代码段应如下所示:

RPCMessage c = new RPCMessage();
//ByteBuffer bb = ByteBuffer.wrap(mData);
//int index = 0;
//c.setMessageType(bb.getShort(index)); 
c.setMessageType(MessageType.REPLY); // You can change this line as per your need
//index += 2;

测试我在RPCMessage class

中使用了以下main函数的枚举
public static void main(String[] args) {
    RPCMessage c = new RPCMessage();
    //int buffSize = 0;
    c.setMessageType(MessageType.REPLY);
    //ByteBuffer bb = ByteBuffer.allocate(buffSize);
    short typeNum = (short) c.getMessageType().enumVar;
    //int index = 0;
    //bb.putShort(0,typeNum);
    //index+=2;

    System.out.println(typeNum);
}

请注意,上述答案需要根据您的需要进行适当的更改。 我只提供了与enum相关的部分,让您以简单的方式理解它。 有更多有说服力的方法可以使用enum

有关枚举的详细信息,请检查: https://www.javacodegeeks.com/2015/09/how-and-when-to-use-enums-and-annotations.html

如果您想知道枚举与常量之间的使用,可以参考: https://codereview.stackexchange.com/questions/125415/best-practice-for-constant-class-in-java/125416#125416