好的,我可以通过某种方式实现这一目标:
String myString = "someString";
Class myClass = myString.getClass();
HashMap<mClass, Integer> = new HashMap<myClass, Integer>();
所以我想创建一个新的hashmap,其类类型为我的变量键,如Integer或String ...
答案 0 :(得分:1)
这是不可能的。我将引导您完成各种可能性。
您可以使用泛型创建辅助方法。这将起作用,因为所有泛型都编译成简单的Object
s。
public static <T> Map<T, Integer> createMap(Class<T> cl)
{
return new HashMap<T, Integer>();
}
现在,您可以像这样使用它:
Map<String, Integer> map = createMap(String.class);
但是,这将要求您在编译时知道T是什么。所以这不起作用:
String str = "Test";
Class cl = str.getClass();
Map<String, Integer> map = createMap(cl); // Doesn't compile.
因此,总而言之,这个辅助方法不值得,因为你可以简单地写:
Map<String, Integer> map = new HashMap<String, Integer>();
答案 1 :(得分:0)
由于type erasure这不起作用。 一种可能的(但更详细的方法)是创建一个工厂方法,该方法基于传递的参数返回Map,例如:
MapFactory.create(String.class);
编辑:回答@millimoose评论这与直接实例化没有区别(这是真的):
您可以尝试实现自己的Map,或者修改或扩展HashMap实现,以便它保留类型信息。