gpt4 book ai didi

java - 这是有效的 Java 代码吗?

转载 作者:行者123 更新时间:2023-11-30 06:37:56 25 4
gpt4 key购买 nike

我正在使用 Eclipse,它对以下代码非常满意:

public interface MessageType
{
public static final byte KICK = 0x01;
public static final byte US_PING = 0x02;
public static final byte GOAL_POS = 0x04;
public static final byte SHUTDOWN = 0x08;
public static final byte[] MESSAGES = new byte[] {
KICK,
US_PING,
GOAL_POS,
SHUTDOWN
};
}

public class MessageTest implements MessageType
{
public static void main(String[] args)
{
int b = MessageType.MESSAGES.length; //Not happy
}
}

但是,我运行它的平台在上面标记的行崩溃了。通过崩溃,认为相当于 BSOD。我的代码有什么问题吗,或者我是否需要为我的平台寻求 Java VM 的开发人员?


编辑:

好的,感谢您的回复。结果证明是 Java VM 中的一个错误。引用开发人员的话,'gloomyandy',

This is a known problem with interfaces that have a static initializer. It is fixed in the current development builds...

最佳答案

我没有发现这段代码有任何问题,除了如果你使用 Java5 或更高版本,你最好使用枚举:

public enum MessageType
{
KICK (0x01),
US_PING (0x02),
GOAL_POS (0x04),
SHUTDOWN (0x08);

private byte value;
MessageType(byte value) { this.value = value; }
byte getValue() { return value; }
}

public class MessageTest
{
public static void main(String[] args)
{
int b = MessageType.values().length; //Should be happy :-)
}
}

更新:要从其字节表示重新创建枚举值,您需要使用以下内容补充 MessageType(改编自 Effective Java,第 2 版。第 31 项):

private static final Map<Byte, MessageType> byteToEnum = new HashMap<Byte, MessageType>();

static { // Initialize map from byte value to enum constant
for (MessageType type : values())
byteToEnum.put(type.getValue(), type);
}

// Returns MessageType for byte, or null if byte is invalid
public static MessageType fromByte(Byte byteValue) {
return byteToEnum.get(byteValue);
}

关于java - 这是有效的 Java 代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2797995/

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