質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

2084閲覧

Map.putの使い方(java)

uer03108

総合スコア194

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/10/18 16:07

初歩的な質問で申し訳ないのですが、下記の2つの書き方は問題ないでしょうか。
一般的な書き方なのか分かりません。

java

1//通常(?)の書き方 2Map<String, Object[]> map = new HashMap<String, Object[]>; 3String key = "key"; 4Object[] ary = {"a", 1, 2.0L}; 5map.put(key, ary);

java

1//省略した書き方 2Map<String, Object[]> map = new HashMap<String, Object[]>; 3map.put("key", new Object[]{"a", 1, 2.0L});

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

どちらも問題ないと思います。ただMapに突っ込むだけなら前者の例のようにわざわざ変数に入れる必要はないと思います。

投稿2017/10/18 16:58

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2017/10/19 00:42

よく見たら2.0Lは駄目ですね。
uer03108

2017/10/19 03:53

有難うございました。
guest

0

Java

1Map<String, Object[]> map = new HashMap<String, Object[]>; // ←最後に()が足りません。

重箱の隅をつつくような指摘だけではなんですし、すでにswordoneさんの回答ですでに問題は解決しているので、Map型の初期化時に値を突っ込む方法もあるということを書いておきます。

Java

1Map<String, Object[]> map = new HashMap<String, Object[]>(){ 2 { 3 put("key", new Object[]{"a", 1, 2.0L}); 4 } 5};

この書き方は「インスタンス初期化子」といいます。上記パターンでは「HashMapの無名クラス生成時にインスタンス初期化子を使って初期化処理を追加している」、ということになります。
【解説ページ】
http://d.hatena.ne.jp/satosystems/20120905/1346805620

投稿2017/10/19 00:45

編集2017/10/19 00:46
masaya_ohashi

総合スコア9206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uer03108

2017/10/19 03:52

初めて知りました。 無名クラスの場合は、コンストラクタが使用できないので(名前からして)イニシャライザを使用するということですね。 https://teratail.com/questions/2935
guest

0

挙げておられるコードの断片を見たときの意見はswordoneさんが答えておられる通りと思います。ご質問を拝見して感じたことを少しコメントしてみます。

putに限らず一般的にメソッド呼び出しの引数はどんな式でも書けますが、問題は「意図していることをよりよく実現する」ことです。それはそのコードがやろうとしていることやコードを人間が見たときの見易さなど様々な前提に左右されます。こうした前提はコードが現れる場面ごと、プログラマーの好みなどによっても様々に変化するので、その時々でどれがよいか判断するのが大事と思います。

例えばswordoneさんの回答にある「わざわざ変数を使う必要はない」というのは

  • 代入する値を表す式が比較的単純
  • 代入する値を他の箇所で用いない

といった「前提条件がはっきりとはわからないコードの断片を見たときの印象」からの判断だと思います。これが

java

1Object[] ary = { 2 "a", 1, "b", 2, ..., 3 ... 4 "y", 25, "z", 26, 5}; 6map.put("key", ary);

ならどうだったでしょうか?例えaryが他で参照されることがなくても「変数へ代入してからputへ変数を指定する書き方を好む」という意見も出てくるかも知れませんよ?またmasaya_ohashiさんが挙げておられるような書き方がよいケースもあるでしょう。繰り返しになりますが、それぞれどれが望ましいかは状況によって変わるので一概にこの書き方がベストという単純な答えはないと思います。

以上、申し上げたかったのは「一般的にどうするのがよいかを漠然と問う」よりも、様々なコードを書く経験を通して「書き方の違いについての知見を積む」ことを忘れないでほしいということです。

投稿2017/10/19 03:32

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uer03108

2017/10/19 04:06

ご回答有難うございましたm(_ _)m 自分が知りたかったのは、「文法的には問題ないけど、実な内部で不具合が起こっている、または、起こりやすい記述」の可能性はあるのかなと言うことでした。 暗黙的に望ましい記述、望ましくない記述はあると思いますが、他の人のコードを見る機会は少ないので。
KSwordOfHaste

2017/10/19 04:39

そういう意図でしたか。 「文法的には問題ないけど、実は内部で不具合が起こっている、または、起こりやすい記述」といったことは「通常はそんなことが起こらないように首尾一貫した考え方で言語が設計されている」と考えるのが普通です。もし質問意図がそういうことであれば質問文に明確にそう書いた方がよいですよ。一般的にどちらがよいか?では質問意図がぼやけてしまいます。
uer03108

2017/10/20 04:08

有難うございました。 確かに「一般的な書き方」では分かりにくいですね。 もう少し詳しく書くように致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問