JDK9開発実験用IDEA-EAPを使用しました。
私が次のエラーを取得しています -
Error:(3, 20) java: package jdk.internal.misc is not visible (package jdk.internal.misc is declared in module java.base, which does not export it to module com.jigsaw.npe)
クラス定義があるとして -
package experiment;
import jdk.internal.misc.Unsafe;
public class CompareAndSwap {
static Unsafe UNSAFE = Unsafe.getUnsafe();
...
}
私がを含むしようとしたmodule-info.java
ファイルにも次の文でIDEを使って作成したモジュール内-
module com.jigsaw.npe {
requires java.base;
}
ディレクトリ構造が今絵に描かれるようになります -
IDEかかわらを反映module-info.java
として、未使用の、おそらくこれを私が定義することはできませんよということの理由であるmodule com.jigsaw.npe
、上記試みました。
正しく私が見逃してmodule-info.javaおよび/もしくはそれ以外を配置する方法の一部の助けを探して。
ニコライの答えはからそれ以外の場合はアンエクスポートのパッケージをエクスポートする必要が技術に関する正しいjava.base
モジュールまたは任意の他のモジュールから。
目標は使用の場合でもUnsafe
、そうする方法は使用することsun.misc.Unsafe
によってエクスポートされjdk.unsupported
モジュール あなたが無名のモジュールのためのあなたのコードをコンパイルする場合、あなたはそれにアクセスするために、モジュールに関して何も特別な操作を行う必要はありません。あなたはモジュールのコードをコンパイルしている場合は、追加する必要があります
requires jdk.unsupported;
あなたのmodule-info.java
ファイル。
使用するにはUnsafe
あなたが反射しなければならないsetAccessible
以前のJDKリリースでなければならなかったものと同じである場へのアクセスを取得するための技術を:
import sun.misc.Unsafe;
...
Field theUnsafeField = Unsafe.class.getDeclaredField("theUnsafe");
theUnsafeField.setAccessible(true);
Unsafe theUnsafe = (Unsafe)theUnsafeField.get(null);
にもかかわらずUnsafe
にあるjdk.unsupported
モジュール、この技術はに従い、JDK 9でサポートされJEP 260。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加