我将hashmap定义为以下
Map<Class, Object> runners = new HashMap<Class, Object>();
runners.put(Entity.class, new EntityRunner());
在函数中,我传递了一个包含getClass()方法的元素。
此类对应于上面定义的哈希映射中的键。
我想要做的是能够从哈希映射中获取相应的Object,将其分配给变量,然后将其转换为相应的对象并能够执行该对象方法
有什么想法吗?
答案 0 :(得分:1)
好吧,使用强制转换操作符。
EntityRunner runner = (EntityRunner)runners.get(Entity.class)
更严重的是,这里有一种设计气味。你怎么知道要投的什么课?如果您不能在代码中逐字写入,那么编写方法调用时会遇到问题。
或者你可以使用反思,但这只会进一步推动问题:即便如此,你怎么知道调用哪种方法?
答案 1 :(得分:0)
我在这里看不到任何困难。
你可以尝试下面的
import java.util.HashMap;
import java.util.Map;
public class TestClass {
public static void main(String []args){
Map<Class, Object> runners = new HashMap<Class, Object>();
runners.put(TestClass.class, new TestClass());
// getting TestClass instance from map
TestClass obj = (TestClass) runners.get(TestClass.class);
obj.display();
//It is as good as using HashMap without Generics
Map runners2 = new HashMap();
runners2.put(TestClass.class, new TestClass());
obj = (TestClass) runners.get(TestClass.class);
obj.display();
}
public void display(){
System.out.println("In DisplayMethod");
}
}
然而,对于键/值对,对象/类等数据类型不是推荐。你永远不知道你会在哪里得到 ClassCastException 。
这是在Java中引入 Generics 的主要原因。