gpt4 book ai didi

java - 无法将枚举类型转换为短类型,反之亦然

转载 作者:行者123 更新时间:2023-12-02 03:22:40 24 4
gpt4 key购买 nike

在一个类中我有这段代码

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 编程还很陌生。这个你能帮我吗。预先感谢:)

最佳答案

该实现不适合您的情况。

我将尝试详细说明 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类中使用的主要函数的枚举

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 相关的部分,以便您轻松理解它。还有更多 Eloquent 方式来使用枚举

有关枚举的更多详细信息,请检查: 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

关于java - 无法将枚举类型转换为短类型,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39403380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com