2009-11-20 22 views
28

मैं एक विधि लिखने की कोशिश कर रहा हूं जो प्रतिबिंब का उपयोग कर कक्षा में एक निजी क्षेत्र प्राप्त करेगी।प्रतिबिंब के माध्यम से जावा में निजी चरों तक पहुंच

यहाँ मेरी कक्षा (इस उदाहरण के लिए सरलीकृत) है:

public class SomeClass { 
    private int myField; 

    public SomeClass() { 
     myField = 42; 
    } 

    public static Object getInstanceField(Object instance, String fieldName) throws Throwable { 
     Field field = instance.getClass().getDeclaredField(fieldName); 
     return field.get(instance); 
    } 
} 

तो कहते हैं कि मैं यह कर:

SomeClass c = new SomeClass(); 
Object val = SomeClass.getInstanceField(c, "myField"); 

मैं हो रही है एक IllegalAccessException क्योंकि myField निजी है। प्रतिबिंब का उपयोग कर निजी चर प्राप्त करने/सेट करने का कोई तरीका है? (मैंने इसे सी # में किया है, लेकिन यह पहली बार है जब मैंने जावा में इसे आजमाया है)। यदि आप सोच रहे हैं कि ऐसी पागलपन की आवश्यकता क्यों है :), ऐसा इसलिए होता है क्योंकि कभी-कभी यूनिट परीक्षण के दौरान विफलता परीक्षण आदि के लिए फर्जी मानों पर निजी चर सेट करने के लिए आसान होता है।

उत्तर

32

इसे समझ लिया गया। मन में आवश्यकता

field.setAccessible(true); 
+3

भालू है कि इस अगर वहाँ PermissionManager – Bozho

+0

है यह मामूली प्रदर्शन में सुधार कर सकते हैं, भले ही सदस्य अन्यथा पहुँचा जा सकता है (के रूप में यह जाँच करता है बंद हो जाती है) –

+0

+1 यह सिर्फ मुझे कुछ बचाया काम नहीं करेगा निराशा :) –

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