問題タブ [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.
java - Maven プロジェクト エラー: Diamond/multicatch 演算子は -source 1.5 ではサポートされていません
次の 2 つのエラーのため、Maven Java Web アプリケーションをビルドできません。
プロジェクトにJava 1.8.0を使用しているため、実際に1.5を使用したことがないため、混乱しています
この問題の原因と解決方法を教えてください。
pom.xmlに次の行を追加した後、ビルドしようとしましたが、成功しませんでした:
java - ワイルドカードを使用したジェネリック型の「読み取り専用」オブジェクト
次のコードを検討してください (2 つの質問はコード内にあります)。
- なぜ機能し
b2.addChildren(new Tree<Number>())
ないのですか? - しかし、それはダイヤモンド <> で動作し
b2.addChildren(new Tree<>())
ます。コンパイラがダイアモンド <> 内で使用する型リストはどれですか?
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
java - Java コードをひし形表記に変換するための Eclipse IDE での保存アクション
Java バージョン >= 1.7 を使用している場合は、ひし形表記を使用できます。
それ以外の:
あなたは書ける:
Eclipse Mars-M4 では、最初の構成を使用するとエラーが発生します。(多分、Eclipse Luna のバージョンでは既にそうなっていたのかもしれません。私は確認しませんでした):
これは、次の構成によるものです。
ツリーの [設定] > [Java] > [コンパイラ] > [エラー/警告]。リスト: ジェネリック型 > 冗長型引数 (1.7 以降)。
これは ERROR に設定されます。もちろん、エラーを取り除くために IGNORE に設定することもできます。
別の解決策を探しています。Eclipse には「追加アクション」という概念があります。コードをひし形表記に書き換えるアクションを探しています。
このアクションは既に存在しますか? どうすれば設定できますか?
関連する質問:
- 既存のジェネリックをダイヤモンド構文に変換します(ただし、これは NetBeans にあります)。
java - ダイヤモンド演算子のデフォルトの動作は何ですか
次のような宣言を見たのを覚えています。
private static Logger log = Logger.getLogger(<>.class);
利点は、誤って別のクラスのロガーになることなく、クラスからクラスに貼り付けることができることでした。
今、私はそれをコンパイルすることができません.構文が間違っているに違いありません. では、<> はそれ自体 (ArrayList<>() などではなく) で正確に何に解決されるのでしょうか?
ありがとうございました
アップデート:
それが合法的な構文であるという私の主張は、次のことから来ています。
- 私はそれを合法的で気の利いたトリックとしてウェブ上で見ました.
- 私と同僚の両方がJava 7でIntelliJに貼り付け、正しくコンパイルしました。
とはいえ、そのページに再びアクセスできる検索が見つからず、今すぐコンパイルすることもできません! したがって、コンパイラまたは Java 仕様の知識を持つ誰かが、それが有効かどうか、およびデフォルトが何であるかを明確に述べてくれることを願っています。