2016-12-26 19 views
6

Używanie java-9 build 9-ea + 149 i jol 0.6.Czy jol jest trochę złamany w Javie9?

Running ten prosty kod:

ArrayList<Integer> list = new ArrayList<>(); 
list.add(12); 

System.out.println(ClassLayout.parseInstance(list).toPrintable()); 

wyjściowa:

OFFSET SIZE  TYPE DESCRIPTION     VALUE 
    0  4   (object header)    01 00 00 00 (00000001 00000000 00000000 00000000) (1) 
    4  4   (object header)    00 00 00 00 (00000000 00000000 00000000 00000000) (0) 
    8  4   (object header)    0e 8d 00 f8 (00001110 10001101 00000000 11111000) (-134181618) 
12  4  int AbstractList.modCount   (access denied) 
16  4  int ArrayList.size     (access denied) 
20  4 Object[] ArrayList.elementData   (access denied) 

Ta odmowa dostępu część pochodzi z FieldData.java w metodzie:

public String safeValue(Object object) { 
    if (refField != null) { 
     try { 
      return ObjectUtils.safeToString(refField.get(object)); 
     } catch (IllegalAccessException iae) { 
      // exception, try again 
     } 

     try { 
      refField.setAccessible(true); 
      return ObjectUtils.safeToString(refField.get(object)); 
     } catch (Exception e) { 
      return "(access denied)"; 
     } 
    } else { 
     return "N/A"; 
    } 
} 

i rzeczywisty wyjątek :

Nie można utworzyć chronionego pola przejściowego int java.util.AbstractList.modCount dostępny: moduł java.base nie "otwiera java.util" na nienazwany moduł @ 479d31f3.

Myślę, że to ma związek z zablokowaniem niebezpiecznych funkcji. Pytanie brzmi: jak mam to uruchomić?

Szukałem na właściwości, takie jak:

-XaddExports:java.base/sun.security.provider=ALL-UNNAMED 

Ale nie mogę powiedzieć, co to ma wyglądać.

+0

jak na swoje założenia; Nie będziesz. Java 9 blokuje "Unsafe", proste. – Esko

+4

@Esko to nie jest niebezpieczne, ale tutaj jest błąd, ale odbicie. –

+2

Powiązane: http://stackoverflow.com/questions/41265266/how-to-solve-inaccessibleobjectexception-unable-to-make-member-accessible-m –

Odpowiedz

2

Rozwiązania rzeczywiście postawić prawidłową argumentu ..

--add-opens java.base/java.util=ALL-UNNAMED 

jak sugeruje here