2

编辑:

似乎我的要求还不够清楚,我将尝试更好地解释。

我有一堂课叫Board

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

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

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

我做了一个小图像来尝试想象我想要的东西: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

旧配方:

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

现在,在像 Python 这样的语言中,我可以有一个字典,它有一些整数值作为键和一些函数,这些函数在调用时创建并返回新对象,然后循环遍历 2d 列表并调用字典返回的函数。我将如何使用 Java 来做到这一点?

我虽然想拥有一个 HashMap 并进行某种反思,但我真的不知道该怎么做。

4

1 回答 1

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);

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

于 2012-04-19T19:51:06.353 回答