修改
似乎我对自己的要求不够清楚,我会尝试更好地解释。
我有一个名为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。
答案 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);
如果对象创建函数简短,那么最好用匿名类而不是完全定义的类填充字典。