gpt4 book ai didi

java - 如何存储 Java 类型,只允许某些特定类型?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:08:59 25 4
gpt4 key购买 nike

假设我想要一个充当记录描述符的类,其中每个记录都有一组属性。

每个属性都有一个唯一的名称,并且应该有一个特定的类型,对应于特定的 Java 类型,例如 Integer、String、Short、Double、...

应该限制可能类型的列表,例如我只支持 Integer 和 String。

private HashMap<String, Class> attributeList = new HashMap<String, Class>();

在上面的示例中,HashMap 是一个属性列表,其中键是属性名称,值应该是属性的类型(整数或字符串)。

限制 Hashmap 值定义的最佳方法是什么?

最佳答案

您当然可以使用包装器方法向 map 添加元素,并在那里检查 Integer 和 Sring。但是你只会得到运行时错误。我同意你的观点,限制类型以获得静态错误要好得多。

为此,我实际上不会使用 Integer.class 和 String.class,而是使用枚举:

enum Types { String, Integer };

private Map<String, Types> attributeList = new HashMap<String, Types>();

更新:

仔细想想,如果您必须坚持使用 Class 对象,还有另一种(但更复杂)解决方案:您可以使用假枚举模式,即使用一组常量(通常使用整数 2^i)像枚举。因此,您可以将 Class 对象定义为常量。这当然不能保证没有其他类对象被放入 map 中。这就是为什么 Joshua Bloch 项目 30 说“使用枚举而不是 int 常量”。 但是然后您可以使用Checker Framework使用 Fake Enum 检查器在常量上添加一个额外的类型系统:

@SuppressWarnings("fenum:assignment.type.incompatible")
public class TypeEnum {
public static final @Fenum("Types") Class INT_CONST = Integer.class;
public static final @Fenum("Types") Class STR_CONST = String.class;
}

然后你可以定义你的 map ,限制类型类:

private HashMap<String, @Fenum("Types") Class> attributeList
= new HashMap<String, @Fenum("Types") Class>();

当然,您需要包含 Fenum Checker进入你的编译器。

关于java - 如何存储 Java 类型,只允许某些特定类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7339273/

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