問題タブ [diamond-operator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
6 に答える
9842 参照

java - Java 7 で型推論にダイヤモンド演算子が使用されるのはなぜですか?

List<String> list = new ArrayList();コンパイラの警告が発生します。

ただし、次の例は警告なしでコンパイルされます。List<String> list = new ArrayList<>();

なぜダイヤモンド演算子の導入が必要なのか、興味があります。型引数が存在しない場合、コンストラクターで型推論を行わないのはなぜですか (Java の静的メソッドに対して既に行われ、Google guava などのコレクション ライブラリによって悪用されているため)。

編集:ミリムースの回答を出発点として使用して、実際に型消去が何であるかを調べましたが、すべての型情報を削除するだけではありません。コンパイラは実際にはもう少し多くのことを行います(公式ドキュメントからコピー):

  • ジェネリック型のすべての型パラメーターをそれらの境界またはオブジェクト (型パラメーターが無制限の場合) に置き換えます。したがって、生成されたバイトコードには、通常のクラス、インターフェース、およびメソッドのみが含まれます。
  • 型の安全性を維持するために、必要に応じて型キャストを挿入します。
  • 拡張されたジェネリック型でポリモーフィズムを保持するブリッジ メソッドを生成します。
0 投票する
2 に答える
113 参照

generics - ジェネリック クラスのインスタンス化 (Java)

コードでジェネリック クラスをインスタンス化するときは、次のようにすると常に教えられてきました。

しかし、私がEclipseで作業しているときは、常にこれにオートコンプリートします:

これら2つのステートメントに違いはありますか?

0 投票する
2 に答える
33354 参照

java - Javaのダイヤモンド演算子とは何ですか?

患者クラス型の arraylist があり、arraylist 型に黄色の下線が引かれ、IDE は「新しい式に冗長な型引数があります (代わりに菱形演算子を使用してください)」と述べています。

私の問題は次のとおりです。代わりにダイヤモンド演算子を使用する必要がありますか? それは必須ですか?レコードを arraylist に保存するときに、データの損失やその他の問題が発生することはありますか?

ここに私の配列リストがあります:

正直なところ、ダイヤモンドオペレーターが実際に何であるかはわかりません。

0 投票する
2 に答える
200 参照

perl - while ステートメント、ひし形演算子 <> および Perl の $ARGV 変数を使用した複数テキストの解析と書き込み

ディレクトリ内にいくつかのテキスト ファイルがあり、その内容を解析してファイルに書き込みたいと考えています。これまでのところ、私が使用しているコードは次のとおりです。

このスクリプトを実行すると、ファイルのヘッダーとcompiled.txtエントリのみが取得されます。cmd で次のメッセージも受け取ります。use of uninitialized $ARGV in concatenation <.> or string at concat.pl line 12

だから私は何か間違ったことをしていると思います$ARGVが、まったく使用されていません。さらに、テキストを取得するには、代わりに$header何か他のものを使用する必要があります。

助けが必要です!

0 投票する
7 に答える
10453 参照

java - Java 6 の右側で Generics を使用していますか?

I Java 6 次のように配列リストを宣言できます

Way1:ジェネリックを使用する、つまり<Integer> 右側にも

Way2: ダイヤモンド演算子を使用する

Way3: 左側のみジェネリックを使用

私は簡単に方法 3 を使用することを好みます。これらの方法に違いはありますか?どちらを優先すべきで、その理由は?

更新:- Java 7 では 2 番目の方法が推奨されることはわかっていますが、私の質問は Java 6 のコンテキストにあります。どちらが望ましいですか?

私にとって、方法3は、pが整数の配列リストであることも示しています(方法1で伝えられるのと同じです)。したがって、IDE が警告メッセージを表示するという事実を除いて、違いはありません。

ArrayList は生の型です。ジェネリック型への参照ArrayList<E>はパラメーター化する必要があります

0 投票する
2 に答える
609 参照

performance - Perl 効率 - while(<>) ループ内で ARGV をテストする

次のように述べたとき、私の理解は正しいですか。

while(<>) ループ内の条件で $ARGV (つまり、ファイル名) をテストするために CPU サイクルが浪費されています。最初にファイル名をテストしてから、while() ループ内でそれに応じて各行を処理する方が効率的です。このようにして、データ行を取得するたびにファイル名を冗長にチェックすることはありません。

それとも、ダイヤモンド演算子はこれを後者と同じくらい効率的にするために何らかの魔法を行いますか?

0 投票する
2 に答える
473 参照

java - この菱形表記の説明は?

公式の Java JDK1.7 ガイドからこの引用を入手しましたが、その仕組みがわかりません。誰でも説明できますか?言い換えれば、空の文字列が渡された場合、ダイヤモンドはどのように整数型を推測するのでしょうか?

この例では、コンパイラは、ジェネリック クラス MyClass の仮型パラメーター X の型 Integer を推論します。このジェネリック クラスのコンストラクターの仮型パラメーター T の String 型を推論します。

0 投票する
4 に答える
12293 参照

java - アイデア ide でダイヤモンド演算子のコンパイル エラーが発生する

idea ide で単純なソース コードをコンパイルしようとすると、このエラーが発生します。

jdk は oracle の 1.7.40 です

しかし、この「-source 7」オプションを追加する場所はどこですか?

ide設定を追加しようとしましたが、効果がありませんでした。