gpt4 book ai didi

java可转换枚举

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

我想创建一个具有值的枚举类型,并且可以从该值反之亦然地转换为该值(基本上枚举将是该值的类型安全别名,并且会提高代码可读性) .

我需要这个,因为我正在处理低级嵌入式内容以及写入寄存器等。很多时候,寄存器的一些位具有特殊含义。就像一个寄存器的位 10-11 是有效的 CYCCNT” 00 - CYCCNT_24, 01 - CYCCNT_26, 11 - CYCNT_28”

现在我想做这样的事情:

void setActiveCYCCNT(CYCCNT_ENUM newvalue)
{
Target.writeRegister(ADDRESS, newvalue.value());
}

CYCCNT_ENUM getActiveCYCCNT()
{
return CYCCNT_ENUM.fromValue(Target.readRegister(ADDRESS));
}

我认为做这样的事情(但在很多层面上语法上都是错误的):

看来静态成员无法访问T。我不知道为什么会这样,java不是为每个引用的泛型类型生成一个新类吗?其次java好像不支持泛型枚举?

public enum ConvertableEnum<T> {

private static Map<T, ConvertableEnum<T>> map = new HashMap<T, ConvertableEnum<T>>();
T value;

public ConvertableEnum(T t)
{
this.value = t;
map.put(t, this);
}

public static ConvertableEnum<T> fromValue(T t)
{
return map.get(t);
}

}

在此之后可以做:

public enum CYCCNT : ConvertableEnum<int>
{
CYCCNT_24(0x00), CYCCNT_26(0x01), CYCCNT_28(0x03);
}

然后使用它。

我的问题是如何在语法错误的代码中实现我想要实现的目标?

感谢您的帮助, axos88

最佳答案

我最近刚刚做了类似的事情:

public enum ReferenceType 
{
SELECT(true),
INSERT(false),
SELECT_INTO(false),
UPDATE(false),
DELETE(false),
CREATE_TABLE(false),
DROP_TABLE(false),
PRINT(false),
FROM(false),
DECLARE(false);

private final boolean legalSub;

ReferenceType(boolean _legalSub)
{
this.legalSub = _legalSub;
}

public boolean isLegalSubstatement()
{
return this.legalSub;
}
}

因此,ReferenceType ID 是例如INSERT 但(或其中一个)关联值为 false,该值在声明 (INSERT(false)) 中设置,并且可以使用 isLegalSubstatement() 检索。同样,您可以将多个字段与每个 ID 关联,只要将它们分别包含在构造函数中即可。您可以将每个枚举项视为引用数据表中的一行,其中 ID 是表键,其他字段(括号中)是与该键关联的列。

当然,具有与枚举键关联的属性是可选的,即枚举可以是简单的,没有任何属性。

这能回答你的问题吗?

关于java可转换枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13034027/

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