ใน Java private
ตัวปรับการเข้าถึงถือว่าปลอดภัยเนื่องจากมองไม่เห็นภายนอกคลาส แล้วโลกภายนอกก็ไม่รู้เกี่ยวกับวิธีการนั้นเช่นกัน
แต่ฉันคิดว่าการสะท้อนของ Java สามารถใช้เพื่อทำลายกฎนี้ได้ พิจารณากรณีต่อไปนี้:
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[]
มีทุกสิ่งที่ต้องทำข้างต้น คำถามของฉันคือมีวิธีหลีกเลี่ยงสิ่งประเภทนี้โดยใช้การสะท้อนของ Java หรือไม่?
ฉันอ้างบางประเด็นจากเอกสาร Javaเพื่อชี้แจงคำถามของฉัน
เคล็ดลับในการเลือกระดับการเข้าถึง:
หากโปรแกรมเมอร์คนอื่นใช้คลาสของคุณคุณต้องแน่ใจว่าข้อผิดพลาดจากการใช้ผิดประเภทจะไม่เกิดขึ้น ระดับการเข้าถึงสามารถช่วยคุณได้ใช้ระดับการเข้าถึงที่ จำกัด ที่สุดที่เหมาะสมสำหรับสมาชิกบางคน ใช้ส่วนตัวเว้นแต่คุณจะมีเหตุผลที่ดีที่จะไม่ทำ
getDeclaredMethods
จะส่งคืนชื่อที่ดูเหมือนขยะ