कहो कि मेरे पास एक वर्ग है:
public class R {
public static final int _1st = 0x334455;
}
मैं प्रतिबिंब के माध्यम से "_1st" का मूल्य कैसे प्राप्त कर सकता हूं ?
BR
कक्षा के साथ ।
कहो कि मेरे पास एक वर्ग है:
public class R {
public static final int _1st = 0x334455;
}
मैं प्रतिबिंब के माध्यम से "_1st" का मूल्य कैसे प्राप्त कर सकता हूं ?
BR
कक्षा के साथ ।
जवाबों:
पहले वर्ग की फ़ील्ड प्रॉपर्टी पुनः प्राप्त करें, फिर आप मान प्राप्त कर सकते हैं। यदि आप उस प्रकार को जानते हैं, जिसमें आप किसी एक विधि को null के साथ उपयोग कर सकते हैं (केवल स्थिर फ़ील्ड के लिए, वास्तव में एक स्थिर फ़ील्ड के साथ, गेट मेथड के लिए दिया गया तर्क पूरी तरह से अनदेखा कर दिया जाता है)। अन्यथा आप getType का उपयोग कर सकते हैं और नीचे एक उपयुक्त स्विच लिख सकते हैं:
Field f = R.class.getField("_1st");
Class<?> t = f.getType();
if(t == int.class){
System.out.println(f.getInt(null));
}else if(t == double.class){
System.out.println(f.getDouble(null));
}...
getInt()
तर्क में पारित अनदेखी की? वहां से गुजरने के लिए कक्षा का उदाहरण प्राप्त करने की कोशिश में घंटों बिताए।
R.class.getField("_1st").get(null);
अपवाद हैंडलिंग पाठक के लिए एक अभ्यास के रूप में छोड़ दिया जाता है।
मूल रूप से आप प्रतिबिंब के माध्यम से किसी अन्य की तरह क्षेत्र प्राप्त करते हैं, लेकिन जब आप विधि प्राप्त करते हैं तो आप एक अशक्त में गुजरते हैं क्योंकि कार्य करने के लिए कोई उदाहरण नहीं है।
यह सभी स्थिर क्षेत्रों के लिए काम करता है, चाहे उनका अंतिम रूप कुछ भी हो। यदि फ़ील्ड सार्वजनिक नहीं है, तो आपको setAccessible(true)
पहले उस पर कॉल करने की आवश्यकता है , और निश्चित रूप से SecurityManager को इस सब की अनुमति देनी होगी।
मैं उसी मार्ग का अनुसरण कर रहा था (उत्पन्न आर वर्ग को देखकर) और फिर मुझे यह भयानक एहसास हुआ कि यह शायद संसाधन वर्ग में एक समारोह था। मैं सही था।
यह मिला: संसाधन :: getIdentifier
सोचा कि यह लोगों को कुछ समय बचा सकता है। हालांकि वे कहते हैं कि यह डॉक्स में हतोत्साहित करता है, जो बहुत आश्चर्य की बात नहीं है।
R._1st
काम नहीं कर सका? अगर आप Android के विकास के बारे में बात कर रहे हैं, तो मुझे लगता है किR
कक्षा हमेशा है ...