`使用Unsafe时出现The type ‘Unsafe’ is not API的问题
import java.io.File;
import java.io.FileInputStream;
import java.lang.reflect.Field;
import sun.misc.Unsafe;
//https://www.cnblogs.com/chenpi/p/5389254.html
/*
Unsafe对象不能直接通过new Unsafe()或调用Unsafe.getUnsafe()获取,原因如下:
不能直接new Unsafe(),原因是Unsafe被设计成单例模式,构造方法是私有的;
不能通过调用Unsafe.getUnsafe()获取,因为getUnsafe被设计成只能从引导类加载器(bootstrap class loader)加载
*/
public class UnsafeDemo2 {
public static void main(String[] args) {
byte[] classContents = new byte[0];
try {
classContents = getClassContent();
Class c = getUnsafe().defineClass(null, classContents, 0, classContents.length, null, null);
System.out.println(c.getMethod("getA").invoke(c.newInstance(), null)); //print 1
} catch (Exception e) {
e.printStackTrace();
}
}
private static Unsafe getUnsafe() {
Field f = null;
Unsafe unsafe