繁体   English   中英

使用java反射的问题

[英]problem with using 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函数甚至无法编译。 任何人都可以给我一些有关如何使用给定函数签名正确编写此类函数的提示。

谢谢,

<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) { ... }
    ...
}

此函数会像您尝试创建的那样创建一个地图:

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

注意:注意亚光b的评论,他的观点很重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM