在一个班级中我有这段代码
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编程的新手。这个你能帮我吗。在此先感谢:)
答案 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
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