【发布时间】:2011-10-11 07:43:55
【问题描述】:
我想创建一个使用类作为键来返回该类的实例的映射。比如:
<T> Map< Class<T>, T > instanceMap = new HashMap< Class<T>, T > ();
instanceMap.put( Boolean.class, Boolean.TRUE );
instanceMap.put( String.class, "asdf" );
instanceMap.put( Integer.class, 11 );
Boolean b = instanceMap.get( Boolean.class );
Integer i = instanceMap.get( Integer.class );
String s = instanceMap.get( String.class );
这可能吗?我有一种感觉,不,这不是因为我不能指出T 是一个泛型类型,而不是一个名为“T”的类。感觉有点像“高阶泛型”。
编辑:我知道我可以尝试扩展 Map 并实现我自己的包装器等,但我特别询问是否仅使用 Java 的通用支持来执行此操作。我对这个想法而不是这个特殊案例更感兴趣。
编辑 2: 如下所述,这是问题的重复(或更具体地说是子案例):Java map with values limited by key's type parameter。如果我能找到如此雄辩的措辞,我很可能会找到那个答案,而不是发布这个。
【问题讨论】:
-
每个类(键)只能存储一个值?
-
@home 是的,这将被用作访问 DAO 的一种方式,其中每个 dao 类型只需要一个 dao。
-
JsonObject 可能是一个选项。您可以将任何您喜欢的值作为 jsonobject 的值。您需要的是包 org.json.JSONObject。但是,您可能无法将 foreach 与 JSONObject 一起使用,但有一些替代方法 stackoverflow.com/questions/9151619/…
-
如果你可以坚持任何你想要的,那么它就不是类型安全的。我特别希望将键的类型与值的类型联系起来。您的建议似乎与
Map<String,Object>一样安全。