करता GSON पहुँच निजी सदस्यों एक वर्ग के सीधे मूल्य लाने के लिए अपने गेटर तरीकों लागू बिना?
जावा के नियम यह है कि पीछा किया जाता है है अगर वर्ग बीवर्ग एक गेटर बिना/सेटर तरीके से एक निजी सदस्य यह पहुँचा नहीं जा सकता है।
अब मैं GSON के साथ एक परियोजना जहां में मैं एक लग रहा है गेटर/सेटर तरीकों को नजरअंदाज किया जा रहा है मिल पर काम कर रहा था [इस्तेमाल नहीं किया, और निजी सदस्य सीधे पहुँचा है]
खैर सिर्फ एक छात्र हूँ तो मैं संभवतः सकता है कुछ आम काम याद आ रही है।
वर्ग एक
public class A {
public static void main(String[] args) {
B b = new B();
Gson gson = new GsonBuilder().setPrettyPrinting().create();
System.out.println(gson.toJson(b));
System.out.println("--end--");
}
}
वर्ग बी
public class B {
private int a;
public B() {
a = 1;
}
public int getA() {
System.out.println("I am invoked !");
return 10;
}
public void setA(int a) {
this.a = a;
}
}
नोट: बा 1 का मान असाइन किया गया है, और मैं Geta() कोडित हमेशा 10 वापस जाने के लिए
अगर मैं वर्ग एक से बा का उपयोग, सब कुछ के रूप में उम्मीद काम करता है और यह अभ्यस्त मुझे यह करना, सब ठीक करते हैं यहां तक
GSON संदेह यहाँ शुरू होता है
public class A {
public static void main(String[] args) {
B b = new B();
Gson gson = new GsonBuilder().setPrettyPrinting().create();
System.out.println(gson.toJson(b));
System.out.println("--end--");
}
}
अब चूंकि बी निजी है, इसे गेटटर विधि का आह्वान करना है जिसे हमेशा 10 लौटने के लिए कोड किया जाता है लेकिन मुझे प्राप्त होने वाला आउटपुट
आउटपुट:
{
"a": 1
}
--end--
तो दूसरे शब्दों में निजी विधि के लिए मेरे गेटर विधि
जीएसओएन को शायद फ़ील्ड नामों को प्रतिबिंब द्वारा प्राप्त करने की आवश्यकता है, इसलिए मुझे लगता है कि यह प्रतिबिंब द्वारा मूल्यों को भी पढ़ता है, क्योंकि प्रतिबिंब एक्सेस संशोधक को बाईपास कर सकता है। और पढ़ें [यहां] (http://docs.oracle.com/javase/tutorial/reflect/)। – kajacx
@kajacx मैंने आपका लिंक देखा, दिखता है कि प्रतिबिंब इस तरह के प्रतिबिंब के ओरेकल दस्तावेज़ में कोज़ काम करता है, ** प्रतिबिंब ** के चित्र, और ** आंतरिक का एक्सपोजर ** ** ** निजी सदस्य पहुंच के बारे में उल्लेख किया गया है * * –