問題タブ [javacompiler]
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 - ToolProvider.getSystemJavaCompiler() が JDK 9 で null を返す
Eclipse での私のプロジェクトはWITH SYSTEM JRE 9で実行されています。システム コンパイラを取得するために Java ホームを JDK 9 に設定しようとすると、null が発生しました。
このコードは、以前は JDK 8 (JRE 8 から実行) で正常に動作していました。
ToolProvider.getSystemJavaCompiler 要件の動作方法に変更はありますか?
更新: 問題があるかどうかはわかりませんが、JRE 9 ではなく JDK 9 からプロジェクトを実行すると (java.home への変更は不要になりました)、getSystemJavaCompiler() は正常に動作します。
java - Java 8 の try-with-resources ブロックでのロックのリスク
私が行った場合
コンパイラまたは JITer がロックの作成をブロック内で未使用と見なして削除するリスクはありますか?
後で編集:
少し文脈。私は、C# では次のようなことが許可されている .NET バックグラウンドから来ています。
実際、次のように短縮することもできます
静的コンパイラと JIT コンパイラはBeginTransaction
呼び出しを保持し、実行時に常に発生します。
ただし、Java では、リソースである他のものに try-with-resources を使用することに関して、多くの問題と否定性があるようです。
generics - java8ジェネリックvarargs メソッドの戻り値の型が壊れていますか?
Java6 から Java8 に切り替えた後、問題に直面しています。
突然
java.lang.ClassCastException: java.base/java.lang.Integer は java.base/[Ljava.lang.Object; にキャストできません。
投げられます。
java.lang.reflect.Method.invoke(Object obj, Object... args) の varargs 引数にジェネリック型がマッチしていないようです。
コードがクリーンにコンパイルされ、実行時にのみ失敗するという事実により、これは私にとって非常に恐ろしいように見えます。ちなみに、java8でもソース/ターゲット定義が1.8以下ならコンパイル、実行成功!
理解を深めるために、小さな JUnit の例を用意しました。
このpomを使用して、mavenでこの小さなテストをセットアップしました:
このpomを実行すると
mvn clean compile test -Djava.version= 1.6
すべて順調。しかし、それを実行する
mvn clean compile test -Djava.version= 1.8
ClassCastException が発生します。
この動作が変更された理由のヒント。これはバグですか (または 1.8 までバグでしたか)? 説明をありがとう。
java - スローされたオーバーライド例外でラムダを使用すると、「オーバーライドされたメソッドは例外をスローしません」
重複して閉じられないようにするために、この質問はこの質問とはまったく異なります。
次のインターフェースがあると考えてください
ラムダで正常に動作します
しかし、インターフェイスをから拡張するCallable
と、壊れます。
同じ使い方で。コンパイラは私に次のエラーを与えます
- でオーバーライド メソッドを削除する
R call() throws E
と、機能しFuncE0
ます。 - 匿名クラスを使用すると機能します。
- Eclipse を使用すると、ECJ が機能します。
スローされた例外をオーバーライドするとどうなりますか? これはjavacのバグですか?
jdk_1.8_112 を使用しています
再現するコードを最小限に抑える