जावा में private
एक्सेस संशोधक को सुरक्षित मानते हैं क्योंकि यह कक्षा के बाहर दिखाई नहीं देता है। तब बाहरी दुनिया को उस तरीके के बारे में पता नहीं होता है।
लेकिन मुझे लगा कि जावा प्रतिबिंब इस नियम को तोड़ने के लिए उपयोग कर सकता है। निम्नलिखित मामले पर विचार करें:
public class ProtectedPrivacy{
private String getInfo(){
return "confidential";
}
}
अब एक अन्य वर्ग से मैं जानकारी प्राप्त करने जा रहा हूँ:
public class BreakPrivacy{
public static void main(String[] args) throws Exception {
ProtectedPrivacy protectedPrivacy = new ProtectedPrivacy();
Method method = protectedPrivacy.getClass().getDeclaredMethod("getInfo", null);
method.setAccessible(true);
Object result = method.invoke(protectedPrivacy);
System.out.println(result.toString());
}
}
इस समय मैंने अभी भी निजी विधि को सुरक्षित माना है क्योंकि कुछ करने के लिए ऊपर की तरह हमें विधि का नाम पता होना चाहिए। लेकिन अगर वर्ग जिसमें किसी अन्य द्वारा लिखित निजी पद्धति है, तो हमारे पास उन की दृश्यता नहीं है।
लेकिन कोड की रेखा के नीचे से मेरी बात अमान्य हो जाती है।
Method method[] = new ProtectedPrivacy().getClass().getDeclaredMethods();
अब method[]
इसमें उपरोक्त सभी चीजों को करने की आवश्यकता है। मेरा सवाल है, क्या जावा प्रतिबिंब का उपयोग करके इस तरह की चीजों से बचने का एक तरीका है?
मैं अपने प्रश्न को स्पष्ट करने के लिए जावा प्रलेखन से कुछ बिंदु उद्धृत कर रहा हूं।
एक्सेस स्तर चुनने पर युक्तियाँ:
यदि अन्य प्रोग्रामर आपकी कक्षा का उपयोग करते हैं, तो आप यह सुनिश्चित करना चाहते हैं कि दुरुपयोग से त्रुटियां नहीं हो सकती हैं। प्रवेश स्तर आपको ऐसा करने में मदद कर सकता है। सबसे अधिक प्रतिबंधात्मक पहुँच स्तर का उपयोग करें जो किसी विशेष सदस्य के लिए समझ में आता है। जब तक आपके पास कोई अच्छा कारण न हो, निजी का उपयोग करें।
getDeclaredMethods
कचरे की तरह दिखने वाले नामों को वापस करेगा।