Как мне получить экземпляр sun.misc.Unsafe?

Как мне получить экземпляр небезопасного класса?

Я всегда получаю исключение безопасности. Я перечислил код реализации OpenJDK 6. Я хотел бы возиться с функцией sun.misc.Unsafe предлагаемой мне, но я всегда получаю sun.misc.Unsafe SecurityException("Unsafe").

public static Unsafe getUnsafe() {
    Class cc = sun.reflect.Reflection.getCallerClass(2);
    if (cc.getClassLoader() != null)
        throw new SecurityException("Unsafe");
    return theUnsafe;
}

(Пожалуйста, не пытайтесь сказать мне, насколько небезопасно использовать этот класс.)

Ответ 1

Это должно дать вам пример Unsafe:

@SuppressWarnings("restriction")
    private static Unsafe getUnsafe() {
        try {

            Field singleoneInstanceField = Unsafe.class.getDeclaredField("theUnsafe");
            singleoneInstanceField.setAccessible(true);
            return (Unsafe) singleoneInstanceField.get(null);

        } catch (IllegalArgumentException e) {
            throw createExceptionForObtainingUnsafe(e);
        } catch (SecurityException e) {
            throw createExceptionForObtainingUnsafe(e);
        } catch (NoSuchFieldException e) {
            throw createExceptionForObtainingUnsafe(e);
        } catch (IllegalAccessException e) {
            throw createExceptionForObtainingUnsafe(e);
        }
    }

Ответ 2

От baeldung.com мы можем получить экземпляр, используя отражение:

   Field f =Unsafe.class.getDeclaredField("theUnsafe");
   f.setAccessible(true);
   unsafe = (Unsafe) f.get(null);

редактировать

Ниже приводится цитата из описания проекта, к которому принадлежит этот код.

"Реализацию всех этих примеров и фрагментов кода можно найти на GitHub - это проект Maven, поэтому его легко импортировать и запускать как есть".