使用java反射的问题

时间:2010-01-20 23:55:39

标签: java reflection

假设我想编写一个函数,它将从一些指定的类型T到String创建一个HashMap,例如,从Integer到String的HashMap如下:

HashMap<Integer, String> myHashMay = new HashMap<Integer, String>();

我想灵活指定类型T.所以我写一个函数:

void foo(Class<?> myClass) {
    HashMap<myClass, String> myHashMay = new HashMap<myClass, String>();
    .......
}

因此,如果我调用foo(Integer.class),将在此函数内创建一个从Integer到String的HashMap。显然上面的foo函数甚至没有编译。任何人都可以给我一些关于如何使用给定的函数签名正确编写这样一个函数的提示。

谢谢,

2 个答案:

答案 0 :(得分:2)

<T> void foo(Class<T> myClass) {
    HashMap<T, String> myHashMay = new HashMap<T, String>();
    ...
}

修改 但是,具有这种签名的方法似乎不是非常有用,因为T仅用于在编译时进行类型检查。我只能想象可以使用的单一场景:

<T> void foo(Class<T> myClass) {
    HashMap<T, String> myHashMay = new HashMap<T, String>();
    ...
    try {
        T key = myClass.newInstance();
        myHashMay.put(key, "Value");
    } catch (Exception ex) { ... }
    ...
}

答案 1 :(得分:1)

此功能会像您尝试的那样创建地图:

public <KeyType> Map<KeyType,String> createMapWithKeyType(Class<KeyType> keyType)
{
    return new HashMap<KeyType, String>();
}

注意:注意matt b的评论,他说得好。