在运行时初始化对象

时间:2012-04-19 19:31:34

标签: java hashmap

修改

似乎我对自己的要求不够清楚,我会尝试更好地解释。

我有一个名为Board

的班级

这个类将有一个用整数填充的二维数组,数组中的每个整数值对应一些类(例如,1可能是String的简写)。

这个类也有一些方法来获取这个二维数组,循环它并创建一些类的新实例。

我需要能够自定义2维数组以及不同整数对应的类。

我做了一个小图片试图想象我想要的东西: http://i.imgur.com/bZXrw.png

还有一些伪代码:

class Board:
   Integer[][] some_array = {{1,2,1},{1,2,1}}
   someStructure = {1 : createThing, 2 : createSomeOtherThing};

   generateObjects():
        List[Thing] container = []
        for y in some_array:
            for x in y:
                container.add(someStructure[x]())
        return container

OLD FORMULATION:

我有一个名为Map的类,它应该包含一个Integer[][]对象,整数数组对象中的值对应于一些需要初始化的对象。

现在,在像Python这样的语言中,我可以使用一个字典,它有一些整数值作为键,一些函数在调用时创建并返回新对象,然后遍历2d-list并调用由字典。我将如何使用Java进行此操作?

我虽然想要一个HashMap并做一些反思,但我真的不知道该怎么做tbh。

1 个答案:

答案 0 :(得分:3)

Java没有闭包或指向函数的指针,但你可以有一系列实现接口的类,每个类都有一个方法(比如一个名为“run”或“makeObject”的方法,无论什么在你的背景下有意义)。这些方法将创建您需要的不同对象。您可以将这些类存储在字典中。

这是一些快速而又脏的伪代码,未经测试:

/**
* root for your object hierarchy
*/
public class MyObject
{
    // yadayada
}

/**
* The interface
*/
interface ObjCreator
{
    public MyObject makeObject();
}


/**
* Classes to create specific objects
*/
public class ObjMaker_1
    implements ObjCreator
{
    public MyObject makeObject()
    {
        return new Object1();
    }
}

...

public class ObjMaker_n
    implements ObjCreator
{
    public MyObject makeObject()
    {
        return new Objectn();
    }
}



/** your dictionary */
Map<Integer, ObjCreator> dict = new HashMap<Integer, ObjCreator>();

dict.add(new Integer(1), new ObjMaker_1);
dict.add(new Integer(2), new ObjMaker_2);
...
dict.add(new Integer(n), new ObjMaker_n);

如果对象创建函数简短,那么最好用匿名类而不是完全定义的类填充字典。