জাভাতে 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[]
এটিতে উপরের জিনিসটি করা দরকার contains আমার প্রশ্ন হ'ল, জাভা প্রতিবিম্ব ব্যবহার করে এই ধরণের জিনিস এড়ানো কোনও উপায় আছে কি?
আমি আমার প্রশ্নটি পরিষ্কার করার জন্য জাভা ডকুমেন্টেশন থেকে কিছু পয়েন্ট উদ্ধৃত করছি ।
অ্যাক্সেস স্তর চয়ন করার বিষয়ে টিপস:
অন্যান্য প্রোগ্রামাররা যদি আপনার ক্লাস ব্যবহার করে তবে আপনি নিশ্চিত করতে চান যে অপব্যবহারের ফলে ত্রুটিগুলি ঘটতে পারে না। অ্যাক্সেস স্তরগুলি আপনাকে এটি করতে সহায়তা করতে পারে U সুনির্দিষ্ট সীমাবদ্ধ অ্যাক্সেস স্তরের ব্যবহার করুন যা কোনও নির্দিষ্ট সদস্যের জন্য অর্থবোধ করে। আপনার যদি না করার উপযুক্ত কারণ না থাকে তবে ব্যক্তিগত ব্যবহার করুন।
getDeclaredMethods
আবর্জনার মতো দেখতে এমন নামগুলি ফিরে আসবে।