2016-12-26 17 views
6

जावा-9 बिल्ड 9-एए + 14 9 और जोल 0.6 का उपयोग करना।क्या jol जावा 9 के तहत थोड़ा टूटा हुआ है?

इस सरल कोड चल रहा है:

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

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

आउटपुट:

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) 

यह पहुँच से मना कर हिस्सा विधि में FieldData.java से आता है:

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"; 
    } 
} 

और वास्तविक अपवाद नहीं है :

फ़ील्ड संरक्षित क्षणिक int java.util.AbstractList.modCount सुलभ बनाने में असमर्थ: मॉड्यूल java.base अज्ञात मॉड्यूल @ 479d31f3 पर "java.util खोलता नहीं है"।

मुझे लगता है कि इसे लॉक होने वाली असुरक्षित सुविधाओं के साथ करना है। सवाल यह है कि मैं इसे चलाने के लिए कैसे प्राप्त करूं?

मैं जैसे गुण देखा है:

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

लेकिन वास्तव में नहीं बता सकता कि यह की तरह लग रहे करने के लिए माना जाता है।

+0

अपने धारणा के अनुसार के रूप में; आप नहीं करेंगे जावा 9 'असुरक्षित' को लॉक कर रहा है, जो कि सरल है। – Esko

+4

@Esko यह असुरक्षित नहीं है जो यहां असफल रहा है लेकिन प्रतिबिंब है। –

+2

संबंधित: http://stackoverflow.com/questions/41265266/how-to-solve-inaccessibleobjectexception-unable-to-make-member-accessible-m –

उत्तर

2

समाधान वास्तव में था सही तर्क डाल करने के लिए ..

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

सुझाव here

संबंधित मुद्दे