問題タブ [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.

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

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() は正常に動作します。

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

java - Java 8 の try-with-resources ブロックでのロックのリスク

私が行った場合

コンパイラまたは JITer がロックの作成をブロック内で未使用と見なして削除するリスクはありますか?


後で編集:

少し文脈。私は、C# では次のようなことが許可されている .NET バックグラウンドから来ています。

実際、次のように短縮することもできます

静的コンパイラと JIT コンパイラはBeginTransaction呼び出しを保持し、実行時に常に発生します。

ただし、Java では、リソースである他のものに try-with-resources を使用することに関して、多くの問題と否定性があるようです。

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

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 までバグでしたか)? 説明をありがとう。

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

java - スローされたオーバーライド例外でラムダを使用すると、「オーバーライドされたメソッドは例外をスローしません」

重複して閉じられないようにするために、この質問はこの質問とはまったく異なります

次のインターフェースがあると考えてください

ラムダで正常に動作します

しかし、インターフェイスをから拡張するCallableと、壊れます。

同じ使い方で。コンパイラは私に次のエラーを与えます

  • でオーバーライド メソッドを削除するR call() throws Eと、機能しFuncE0ます。
  • 匿名クラスを使用すると機能します。
  • Eclipse を使用すると、ECJ が機能します。

スローされた例外をオーバーライドするとどうなりますか? これはjavacのバグですか?

jdk_1.8_112 を使用しています

再現するコードを最小限に抑える