假设我想写一个函数,它会创建一个从某个指定类型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) { ... }
...
}
关于java - 使用java反射的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2105964/