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



在一个类中,我有这样的代码

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编程很陌生。请帮我解决这个问题。提前感谢:)

该实现不适合您的情况。

我将尝试详细说明枚举的用法:你的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

中使用了下面的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

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

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

相关内容

最新更新