这是有效的Java代码吗?

时间:2010-05-09 14:54:37

标签: java lejos-nxj

我正在使用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中的一个错误。引用开发者的话,'阴沉的',

  

这是具有静态初始化程序的接口的已知问题。它在当前的开发版本中得到修复......

4 个答案:

答案 0 :(得分:3)

我没有看到此代码有任何问题,除非您使用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);
}

答案 1 :(得分:1)

似乎合理......

如果您从班级中取出“实施MessageType”,它仍会崩溃吗?

答案 2 :(得分:1)

代码本身非常完美。我可以在我的Win7机器上完全编译并运行它(使用Java6);听起来你正在使用一些不寻常的系统?

答案 3 :(得分:0)

每个人都说,它应该有效 你可以尝试这个:

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

(因为课程正在实施,所以不需要MessageType) 我仍然希望the wayPéterTörök建议。