Как мне получить экземпляр 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, поэтому его легко импортировать и запускать как есть".