您当然可以使用包装器方法向地图添加元素,并在那里检查Integer和Sring。但是,那么你只会遇到运行时错误。我同意你的观点,限制类型获得静态错误要好得多。
对于这一点,我真的不使用Integer.class和String.class,但是一个枚举:
enum Types { String, Integer };
private Map<String, Types> attributeList = new HashMap<String, Types>();
UPDATE:
试想想起来了,还有另外一个(但更复杂)的解决方案,如果你有坚持Class对象:您可以使用假枚举模式,即使用一组常量(通常使用整数2 ^我)像一个枚举。所以你可以定义你的Class对象作为常量。这当然不能保证没有其他类对象被放入地图中。这就是为什么Joshua Bloch第30项说“使用枚举而不是int常量”。但然后你可以使用Checker Framework在使用假枚举检查您的常量拉一个额外的类型系统:
private HashMap<String, @Fenum("Types") Class> attributeList
= new HashMap<String, @Fenum("Types") Class>();
:
@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;
}
然后你就可以与该类型类别的管制定义地图
当然,您需要将Fenum Checker包含到您的编译器中。
我刚刚发布几乎相同的答案。该方法足够清晰和灵活。但是你打算如何处理空值? –
null值呢? – DaveFar
我其实正在寻找那样的东西! Thx - 会考虑到这一点! –