2012-04-19 23 views
2

EDIT:初期化オブジェクト

それは私が私が求めているものには十分明らかにされていないかのように、私はより良い説明しようとするつもりだそうです。

私はこのクラスは整数で満たされた2次元配列を有するであろうBoard

と呼ばれるクラスを有している、アレイ内の各整数値は、いくつかのクラスに対応する(したがって1は、例えば、文字列のための短い手であってもよいです) 。

このクラスでは、この2次元配列をループしてループし、いくつかのクラスの新しいインスタンスを作成する方法もあります。

2次元配列と、異なる整数が対応するクラスをカスタマイズする必要があります。

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製剤:いくつかの擬似コードと一緒にhttp://i.imgur.com/bZXrw.png

私はクラスを持っている

は私が望むものを視覚化しようとする小さな画像をしました Integer[][]オブジェクトを含むことになっている Mapという名前のオブジェクトの場合、Integer配列オブジェクト内の値は、n初期化される。

ここで、Pythonのような言語では、キーとしていくつかの整数値を持つ辞書と、呼び出されたときに新しいオブジェクトを作成して返し、2dリストをループし、 dict。 Javaでこれをどうやって行うのですか?

私はHashMapを持っていて何らかの反射をしていますが、何をすべきかわからないのですが。

+1

これはGuavaの 'Cache'のように聞こえる... –

+0

ここでの目的は配列を調べることで、1を見るたびにfunction1()、2:function2()などを呼び出します。もしそうなら、switch文を使用しない理由がありますか? – Thomas

+0

異なる要件と整数値を持つ複数のオブジェクトを持たない場合は、スイッチケースが問題ありません。 – Johan

答えて

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

オブジェクト作成関数が短く、シンプルであれば、それは、匿名クラスの代わりに、完全に定義されたクラスで辞書を取り込むために、おそらく最善です。

+0

私はこれを実装しようとしています.SegOverflowについてのグーグル/検索のキーワードを教えてください。 – Johan

+0

私は擬似コードをいくつか追加しました。作成機能が短く/単純な場合は、完全に定義されたクラスの代わりに匿名のクラスを辞書に入れることができます。 – theglauber

関連する問題