বলুন আমার একটি ক্লাস আছে:
public class R {
public static final int _1st = 0x334455;
}
প্রতিবিম্বের মাধ্যমে আমি কীভাবে "_1st" এর মান পেতে পারি ?
BR
ক্লাস দিয়ে।
বলুন আমার একটি ক্লাস আছে:
public class R {
public static final int _1st = 0x334455;
}
প্রতিবিম্বের মাধ্যমে আমি কীভাবে "_1st" এর মান পেতে পারি ?
BR
ক্লাস দিয়ে।
উত্তর:
প্রথমে শ্রেণীর ক্ষেত্রের সম্পত্তি পুনরুদ্ধার করুন, তারপরে আপনি মানটি পুনরুদ্ধার করতে পারবেন। আপনি যদি প্রকারটি জানেন তবে আপনি নাল দিয়ে একটি পেতে পদ্ধতি ব্যবহার করতে পারেন (কেবল স্থির ক্ষেত্রগুলির জন্য, বাস্তবে একটি স্থির ক্ষেত্রের সাথে গেইন পদ্ধতিতে দেওয়া আর্গুমেন্টটি সম্পূর্ণ উপেক্ষা করা হয়)। অন্যথায় আপনি 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)
হয় তবে আপনাকে প্রথমে এটি কল করতে হবে এবং অবশ্যই সিকিউরিটি ম্যানেজারকে এগুলির সমস্তটির অনুমতি দিতে হবে।
আমি একই রুটটি অনুসরণ করছিলাম (উত্পন্ন আর ক্লাসটি দেখছিলাম) এবং তারপরে আমার এই ভয়ঙ্কর অনুভূতিটি হয়েছিল এটি সম্ভবত সম্পদ শ্রেণীর কোনও কাজ ছিল was আমি সঠিক ছিলাম.
এটি খুঁজে পেয়েছি: সংস্থানসমূহ: getIdentifier
ভেবেছিল এটি হয়ত কিছুটা সময় বাঁচায়। যদিও তারা ডক্সে এটি নিরুৎসাহিত বলেছে, এটি খুব অবাক হওয়ার মতো কিছু নয়।
R._1st
কাজ করতে পারি না? আপনি যদি অ্যান্ড্রয়েড বিকাশের কথা বলছেন তবে আমার মনে হয়R
ক্লাসটি সবসময়ই থাকে ...