首页 > 代码库 > ja获取Unsafe类的实例和取消eclipse编译的错误和警告

ja获取Unsafe类的实例和取消eclipse编译的错误和警告

JRE的rt.jar中提供了一个类sun.misc.Unsafe,虽然这个类因为其不其安全性,不建议使用,而且被加了诸多限制;但

是在很多场合下我们确实需要这个类提供的强大功能。JDK类库下的NIO和concurrent包下的很多类都使用到了Unsafe

类,如AtomicInteger和AbstractQueuedSynchronizer等。

 

JDK源码中对这个类进行了严格限制,我们不能通过常规new的方式去获取该类的实例,也不能通过Unsafe.getUnsafe

()来获取实例。但是我们可以通过反射,在我们的应用代码中获取Unsafe类的实例:

public static Unsafe getUnsafeInstance() throws Exception
{
        // 通过反射获取rt.jar下的Unsafe类
        Field theUnsafeInstance = Unsafe.class.getDeclaredField("theUnsafe");
        theUnsafeInstance.setAccessible(true);
        // return (Unsafe) theUnsafeInstance.get(null);是等价的
        return (Unsafe) theUnsafeInstance.get(Unsafe.class);
}

在eclipse编写完这个函数之后,会出现错误或者警告提示:Access restriction: The type Unsafe is not accessible

due to restriction on required library C:\Program Files\Java\jdk1.6.0_32\jre\lib\rt.jar。

虽然这段代码在eclipse里面会报经过或者报错,但它的却是可以运行的。我们可以在eclipse进行如下设置,来取消警

告或错误:Window-->Preferences-->Java-->Compiler-->Errors/Warnings,将里面的Deprecated and restricted API中

Forbidden references(access rules)设置成Ignore,这样eclipse就不会再报警告或者错误了。