2016-05-25 8 views
0

Javaでは、f(x_1,...,x_n)->yという形式の関数の出力のn次元データ構造を構築しています。これをJSONに変換して処理したクライアントに戻します。データ構造の深さは評価された関数への入力引数の数に依存するので(私はn次元です)、私はパラメータのリストを渡され、リストのリストを生成する再帰関数を使ってデータ構造を生成しています2つ以上のパラメータが渡された場合、または単一のパラメータだけが渡された場合は2倍のリストになります。この方法は、出力リストを取りJSONに変換し、レスポンスオブジェクトに追加し、別の方法で呼び出された再帰的に定義されたリストのリストの生の型を避けるにはどうしたらいいですか?

static private List buildList(List<String> parameters){ 
    if(parameters.size() > 1){ 
     List<List> returnList = new arrayList<List>; 
     //call buildList to generate contents of returnList; 
     return returnList; 
    } else { 
     List<Double> returnList = array of values generated by another method 
     return returnList; 
    } 
} 

:リストを生成するための方法は、次のようになります。

私の問題は、実行時まで自分のデータ構造の次元性が分からないため、私の関数を定義する方法がわからないので、 ListおよびList<List>。理想的には、戻り値を3次元データ構造の場合はList<List<List<Double>>>のように入力する必要がありますが、これを行うためのコードを設定する方法がわかりません。私は多くのJavaをコード化していないので、型の安全性は私にはあまり知られていない概念ですが、私はJavaの素晴らしい世界では生の型を使用するのが一般的ではないという印象を受けています。

この種の再帰パターンでの生の型の使用を避けるベストプラクティスの方法はありますか、現在の方法に固執する必要がありますか?

+2

'List 'を使う必要があります。 –

答えて

2

すべてのオブジェクトの親クラスはObjectクラスです。 <Object>は何でも保持することができます(List<List<List<Double>>>)。したがって、Listを宣言するたびに、任意のオブジェクトを保持できるタイプObjectを作成します。

1

ジェネリックス(「角かっこ」の間のもの)は、コンパイル時のタイプの安全性チェックに使用されます。

リクエストまで指定されたリストの内容がわからない場合は、何の意味もありません。

おそらく最も簡単にリストをList<Object>として入力できます。

また、側先端には、あなたが7以上のJAVAていると仮定すると、あなたがより簡単にIMPLを宣言することができます。

List<Object> myList = new ArrayList<>(); 

ArrayListに空<>に注意してください。これは「宣言された型ごと」を意味します。あなたのコードを少し簡潔にするだけです。

+0

'List 'は 'List 'と**同じではないことに注意してください。 'List 'は何のリストでもあり、 'List 'は特定の未知のタイプのリストです。 'List 'に 'add 'することはできません。 –

+0

Derp、私の間違い、指摘していただきありがとうございます。 – Taylor

関連する問題