作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在一个类中我有这段代码
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/
我是一名优秀的程序员,十分优秀!