Tashqi sinfdan maxfiy maydonga qanday kirish mumkin?
sobes.tech AI
AIdan javob
موجودہ کئی طریقے ہیں، لیکن یہ انکاپسولیشن کے اصولوں کی خلاف ورزی کرتے ہیں اور ان کے استعمال پر غور سے غور کرنا چاہئے۔
-
عکاسی (Reflection): سب سے زیادہ لچکدار طریقہ۔ یہ کسی بھی کلاس کے فیلڈز، طریقوں اور کنسٹرکٹرز تک رسائی فراہم کرتا ہے، چاہے وہ نجی طور پر اعلان شدہ ہوں۔
// "Person" کلاس کے نجی "name" فیلڈ تک رسائی کی مثال try { Person person = new Person("Alice"); Field nameField = Person.class.getDeclaredField("name"); // نجی فیلڈ حاصل کریں nameField.setAccessible(true); // قابل رسائی بنائیں String name = (String) nameField.get(person); // فیلڈ کی قیمت حاصل کریں System.out.println("عکاسی کے ذریعے نجی فیلڈ تک رسائی: " + name); } catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); }یاد رکھیں کہ عکاسی ایپلیکیشن کو سست کر سکتی ہے اور کوڈ کی پڑھنے میں مشکل پیدا کر سکتی ہے۔ یہ obfuscation یا API میں تبدیلیوں کے دوران بھی مسائل پیدا کر سکتا ہے۔
-
گیٹرز اور سیٹرز: معیاری اور تجویز کردہ طریقہ۔ یہ عوامی یا محفوظ طریقوں کے ذریعے نجی فیلڈز تک کنٹرول شدہ رسائی فراہم کرتا ہے۔
// نجی فیلڈ اور گیٹر کے ساتھ کلاس public class Person { private String name; public Person(String name) { this.name = name; } public String getName() { // نجی فیلڈ تک رسائی کے لیے گیٹر return name; } } // بیرونی کلاس گیٹر کے ذریعے رسائی حاصل کرتی ہے public class Main { public static void main(String[] args) { Person person = new Person("Bob"); String name = person.getName(); // گیٹر کا استعمال System.out.println("نجی فیلڈ تک رسائی گیٹر کے ذریعے: " + name); } }یہ طریقہ انکاپسولیشن کو یقینی بناتا ہے اور ڈیٹا تک رسائی کے منطق کو کنٹرول کرنے کی اجازت دیتا ہے۔
-
اندرونی کلاسیں: اندرونی کلاس کو بیرونی کلاس کے تمام ارکان تک رسائی حاصل ہوتی ہے، بشمول نجی ارکان۔
// بیرونی کلاس جس میں نجی فیلڈ ہے public class OuterClass { private int secretValue = 42; // اندرونی کلاس، نجی فیلڈ تک رسائی رکھتی ہے public class InnerClass { public int getSecret() { return secretValue; // بیرونی کلاس کے نجی فیلڈ تک رسائی } } } // استعمال کی مثال public class AnotherClass { public static void main(String[] args) { OuterClass outer = new OuterClass(); OuterClass.InnerClass inner = outer.new InnerClass(); int value = inner.getSecret(); System.out.println("اندرونی کلاس کے ذریعے نجی فیلڈ تک رسائی: " + value); } }یہ طریقہ کار اس وقت مفید ہے جب نجی فیلڈز تک رسائی کی ضرورت والی فعالیت بیرونی کلاس کے ساتھ منطقی طور پر منسلک ہو۔
-
سیریلائزیشن/ڈیسیریلائزیشن: یہ ایک آبجیکٹ کے فیلڈز تک رسائی کے لیے استعمال کیا جا سکتا ہے جب اسے سیریلائزڈ حالت سے بحال کیا جائے، لیکن یہ بیرونی کلاس سے براہ راست رسائی کا طریقہ نہیں ہے۔
طریقہ کا انتخاب مخصوص صورتحال اور اس وجہ پر منحصر ہے کہ نجی فیلڈ تک رسائی کیوں ضروری ہے۔ زیادہ تر معاملات میں، گیٹرز اور سیٹرز کا استعمال ترجیح دی جاتی ہے۔ عکاسی کو احتیاط سے استعمال کرنا چاہئے اور صرف اس صورت میں جب دیگر طریقے دستیاب نہ ہوں یا بہت پیچیدہ ہوں۔