加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何存储Java类型,只允许一些特定的?

发布时间:2020-12-14 16:37:45 所属栏目:Java 来源:网络整理
导读:假设我想要有一个类用于记录的描述符,其中每个记录都有一组属性. 每个属性都有一个唯一的名称,应该有一个特定的类型,对应一个特定的Java类型,如整数,字符串,短,双,… 应该限制??可能的类型列表,例如我仅支持Integer和String. private HashMapString,Class at
假设我想要有一个类用于记录的描述符,其中每个记录都有一组属性.

每个属性都有一个唯一的名称,应该有一个特定的类型,对应一个特定的Java类型,如整数,字符串,短,双,…

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

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

在上面的例子中,HashMap是属性列表,其中key是属性名称,值应该是属性的类型(整数或字符串).

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

解决方法

您当然可以使用包装方法向元素添加地图,并检查Integer和Sring.但是,您只会遇到运行时错误.我同意你的限制类型来获得静态错误好多了.

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

enum Types { String,Integer };

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

更新:

要想到它,还有另一个(但更复杂)的解决方案,如果你必须坚持Class对象:你可以使用假的枚举模式,即使用一组常量(通常是整数2 ^我被使用)像一个枚举所以你可以定义你的Class对象作为常量.那当然不能保证没有其他的类对象被放入地图.这就是为什么Joshua Bloch的第30项说“使用枚举而不是int常量”.但是,您可以使用Checker Framework通过使用假枚举检查程序为您的常量提供额外的类型系统:

@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;
}

然后,您可以使用类型类别限制对地图进行定义:

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

当然,您需要将Fenum Checker包含在编译器中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读