新手通用参数设置... <t> </t>

时间:2013-09-07 14:06:40

标签: java

好的,我可以通过某种方式实现这一目标:

String myString = "someString";
Class myClass = myString.getClass();

HashMap<mClass, Integer> = new HashMap<myClass, Integer>();

所以我想创建一个新的hashmap,其类类型为我的变量键,如Integer或String ...

2 个答案:

答案 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实现,以便它保留类型信息。