通过指定对象实例化哈希映射

时间:2013-09-24 11:37:24

标签: java object hashmap

我想为一个名为Manager的类创建一个构造函数,该类将Object作为参数:

public class Manager{
    public Manager(Object object){}
} 

在这个构造函数中,我想实例化一个使用String和构造函数参数object的非本地HashMap对象,所以它会是这样的:

public class Manager{
    private HashMap objects;
    public Manager(Object object){
        objects = new HashMap<String, object>(); /*note it's 'object' and not 'Object'*/
    }
}

因此,如果从示例中我将实例化一个经理,我将能够做这样的事情:

Manager myObjectManager = new Manager(MyObject); /* Create a new Manager instance with MyObject object for an example */
myObjectManager.getDescription(); /* Use a method from the MyObject class

我知道我提供的示例没有使用正确的java语法,我只使用java来描述我正在寻找的内容。

我只想解释一下,我想要一个可以使用构造函数参数实例化HashMap对象的构造函数。

编辑:我会尝试更好地解释,管理器类应该保存来自同一个类的对象并使用该字符串来查找它们。例如,我将使用spritesheet管理器,我将用它来查找播放器的spritesheet。

4 个答案:

答案 0 :(得分:5)

您正在混淆实例的类型和实例本身!

我不确定你想要实现什么,但也许泛型可能是一个解决方案:

public class Manager<T> {
    private final Map<String, T> objects;

    public Manager() {
        objects = new HashMap<String, T>();
    }
}

以及其他地方:

Manager<MyObject> myManager = new Manager<MyObject>();

答案 1 :(得分:3)

你快到了:

public class Manager<T> {

    private final Map<String, T> myMap;

    public Manager(){
        myMap = new HashMap<String, T>();
    }
} 

因此,您将Manager声明为类型参数为T的泛型类,然后您可以在Map中使用此参数。 Manager的实例化看起来像:

final Manager<MyObject> manager = new Manager<MyObject>(); 

答案 2 :(得分:1)

相反,你可以使用泛型来解决它:

class Manager<T> {
    HashMap<String, T> map = new HashMap<String, T>();;
    public Manager(T object) {
        map.put("something", object); 
    }
}

答案 3 :(得分:0)

在HashMap声明中,如。

public Manager(Object object){
        objects = new HashMap<String, object>();
}
Java中

不可能。 Becasue,对象应该只是非原始类型,而不是任何对象的引用。