在一个类中,我有这样的代码
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
类
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