分配后转换对象

时间:2016-01-07 09:50:02

标签: java object casting

我将hashmap定义为以下

    Map<Class, Object> runners = new HashMap<Class, Object>();
    runners.put(Entity.class, new EntityRunner());

在函数中,我传递了一个包含getClass()方法的元素。

此类对应于上面定义的哈希映射中的键。

我想要做的是能够从哈希映射中获取相应的Object,将其分配给变量,然后将其转换为相应的对象并能够执行该对象方法

有什么想法吗?

2 个答案:

答案 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 的主要原因。