2012-10-22 13 views
10

Wie bekomme ich die Instanz der unsicheren Klasse? Ich bekomme immer die Sicherheitsausnahme. Ich habe den Code der OpenJdk6-Implementierung aufgelistet. Ich würde gerne mit der Funktion sun.misc.Unsafe auf mich einspielen, aber ich bekomme immer die SecurityException Unsafe.Wie bekomme ich die Instanz von sun.misc.Unsafe

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

Bitte versuchen Sie nicht, mir zu sagen, wie unsicher es ist, diese Klasse zu verwenden.

Antwort

26

Dies sollte Ihnen Instanz Unsafe geben:

@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); 
     } 
    } 
Verwandte Themen