5

次のように、静的データを JavaのHashMapに挿入しようとしています。

HashMap<String,String[]> instruments = new HashMap<String, String[]>();
instruments.put("EURUSD", {"4001","EURUSD","10000","0.00001","0.1","USD"});

しかし、コンパイラはそれを好まない。そのデータを HashMap に挿入する唯一の方法は、文字列配列を個別に宣言してから、次のように HashMap に入れることです。

String[] instruDetails = {"4001","EURUSD","10000","0.00001","0.1","USD"};
instruments.put("EURUSD", instruDetails);

しかし、あまり表現力がなく、維持するのが難しい

だから私の質問は、put()操作と文字列配列の宣言を1つのステップ/行で行う方法はありますか?

4

3 に答える 3

12

これはそれを行います:

instruments.put("EURUSD", new String[]{"4001","EURUSD","10000","0.00001","0.1","USD"});
于 2012-10-04T17:46:07.987 に答える
8

すべてを1つの文にまとめるには、中括弧の初期化を使用します。-

 HashMap<String,String[]> instruments = new HashMap<String, String[]>() {
     {
      put("EURUSD", new String[]{"4001","EURUSD","10000","0.00001","0.1","USD"});
      put("EUR", new String[]{"4001","EURUSD","10000","0.00001","0.1","USD"});
     }
 };
于 2012-10-04T17:46:44.687 に答える
6

私はあなたがすでにうまくいくものを手に入れたと思います。しかし、その理由は

instruments.put("EURUSD", {"4001","EURUSD","10000","0.00001","0.1","USD"});

動かないの{"4001","EURUSD","10000","0.00001","0.1","USD"}{}初期化のための Java 配列のシンタックス シュガーまたはショートカットです。常に配列宣言ステートメントに沿っていなければならないという制約があります。そうしないと、構文エラーになります。

のような配列宣言文

String[] array = {"1", "2"};

そうすれば、Java は、作成する必要がある配列が実際にはString型要素であることを認識します。

上記のステートメントを次のように破ると

String[] array;
array = {"1", "2"};

コンパイルされません。

を使用するnew String[]{"4001","EURUSD","10000","0.00001","0.1","USD"}と、コンパイラは、要素の型がString( new String[]) である新しい配列をインスタンス化し、指定した値で新しくインスタンス化された配列を初期化する必要があることを認識します ( {"4001","EURUSD","10000","0.00001","0.1","USD"})。

于 2012-10-04T18:06:24.533 に答える