問題タブ [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 投票する
2 に答える
10301 参照

java - Maven プロジェクト エラー: Diamond/multicatch 演算子は -source 1.5 ではサポートされていません

次の 2 つのエラーのため、Maven Java Web アプリケーションをビルドできません。

プロジェクトにJava 1.8.0を使用しているため、実際に1.5を使用したことがないため、混乱しています

ここに画像の説明を入力

ここに画像の説明を入力

この問題の原因と解決方法を教えてください。

pom.xmlに次の行を追加した後、ビルドしようとしましたが、成功しませんでした:

0 投票する
1 に答える
592 参照

java - ワイルドカードを使用したジェネリック型の「読み取り専用」オブジェクト

次のコードを検討してください (2 つの質問はコード内にあります)。

  1. なぜ機能しb2.addChildren(new Tree<Number>())ないのですか?
  2. しかし、それはダイヤモンド <> で動作しb2.addChildren(new Tree<>())ます。コンパイラがダイアモンド <> 内で使用する型リストはどれですか?
0 投票する
2 に答える
386 参照

java - ダイヤモンド演算子によるJavaオブジェクトの初期化は、javacコンパイル時のパフォーマンスがひどい

リスト内のオブジェクトを開始するためにダイヤモンド演算子を使用しています。ただし、配列オブジェクトの数が増えると、コンパイル時間が数秒から数時間に増加します。Eclipse の自動ビルドにより、Eclipse が応答しなくなりました。その後、それが javac の問題であることに気付きました。<>すべてをコンパイル時間に置き換えると<String, List<Category>>、ほんの数秒に戻ります。これは私のやり方が間違っているのでしょうか、それとも単に Java のパフォーマンスの問題なのでしょうか?

コンパイルにJava時間かかる(またはjavac v8u25をクラッシュさせる)私のコードは次のとおりです。

編集: Sotirios がコメントで述べたように、JDK で報告された問題のようです:

型推論指数コンパイルのパフォーマンス: https://bugs.openjdk.java.net/browse/JDK-8055984

型推論パフォーマンスの回帰: https://bugs.openjdk.java.net/browse/JDK-8048838

0 投票する
3 に答える
2124 参照

java - Java コードをひし形表記に変換するための Eclipse IDE での保存アクション

Java バージョン >= 1.7 を使用している場合は、ひし形表記を使用できます。

それ以外の:

あなたは書ける:

Eclipse Mars-M4 では、最初の構成を使用するとエラーが発生します。(多分、Eclipse Luna のバージョンでは既にそうなっていたのかもしれません。私は確認しませんでした):

Java コード

これは、次の構成によるものです。

ツリーの [設定] > [Java] > [コンパイラ] > [エラー/警告]。リスト: ジェネリック型 > 冗長型引数 (1.7 以降)。

エラー/警告設定ページ

これは ERROR に設定されます。もちろん、エラーを取り除くために IGNORE に設定することもできます。

別の解決策を探しています。Eclipse には「追加アクション」という概念があります。コードをひし形表記に書き換えるアクションを探しています。

このアクションは既に存在しますか? どうすれば設定できますか?

関連する質問:

0 投票する
1 に答える
805 参照

java - ダイヤモンド演算子のデフォルトの動作は何ですか

次のような宣言を見たのを覚えています。

private static Logger log = Logger.getLogger(<>.class);

利点は、誤って別のクラスのロガーになることなく、クラスからクラスに貼り付けることができることでした。

今、私はそれをコンパイルすることができません.構文が間違っているに違いありません. では、<> はそれ自体 (ArrayList<>() などではなく) で正確に何に解決されるのでしょうか?

ありがとうございました

アップデート:

それが合法的な構文であるという私の主張は、次のことから来ています。

  1. 私はそれを合法的で気の利いたトリックとしてウェブ上で見ました.
  2. 私と同僚の両方がJava 7でIntelliJに貼り付け、正しくコンパイルしました。

とはいえ、そのページに再びアクセスできる検索が見つからず、今すぐコンパイルすることもできません! したがって、コンパイラまたは Java 仕様の知識を持つ誰かが、それが有効かどうか、およびデフォルトが何であるかを明確に述べてくれることを願っています。