Các vấn đề tiềm năng mà tôi cần phải tìm ra khi sử dụng phản chiếu là gì. Tôi rất bối rối khi phản ánh, Tại sao java cung cấp loại chức năng này để truy cập thành viên dữ liệu cá nhân.Riêng tư là Riêng tư, vậy tại sao java cung cấp cơ sở để truy cập phương thức riêng tư bằng cách sử dụng sự phản chiếu?
Riêng tư: Như tôi nghĩ, chỉ có lớp được khai báo mới có thể nhìn thấy.
Sau đó, tại sao có thể truy cập những thứ riêng tư trong lớp khác? thuật ngữ này (phản ánh) hoàn toàn tràn khái niệm của tôi về thuộc tính riêng (Access Specifier) trong java.
Tôi đã truy cập nhiều liên kết về chủ đề này nhưng không được giải thích đầy đủ về chủ đề này. ví dụ:
package example;
import java.lang.reflect.Method;
class A{
private void privateMethod(){
System.out.println("hello privateMethod()");
}
}
class B{
public static void main(String[] args) throws Exception {
A d = new A();
Method m = A.class.getDeclaredMethod("privateMethod");
m.setAccessible(true);
m.invoke(d);
}
}
Vì vậy, hãy giải thích kịch bản về cách tiếp cận này theo chiều sâu? Tôi cần lợi thế và bất lợi của phương pháp tiếp cận tư nhân trong các lớp học khác?
http://stackoverflow.com/questions/1239581/why-is-it-allowed-to-access-java-private-fields-via-reflection –
Hầu hết các dự án thông thường không cần bất kỳ sự phản ánh nào, vì nếu bạn bạn chỉ cần suy nghĩ lại về kiến trúc của mình (có tất nhiên là có ngoại lệ). Một nơi mà tôi thường xuyên sử dụng sự phản chiếu mặc dù là trong UnitTests. Bạn có thể chỉ cần thử nhiều kịch bản bằng cách thay đổi một trường riêng bằng cách sử dụng sự phản chiếu trong UnitTests. Ví dụ như một boolean. Giả sử bạn có một thiết lập boolean và bạn muốn thử nghiệm cả hai kịch bản trong một UnitTest. Mặc định trong dự án của bạn là sai, vì vậy trước tiên bạn thử nghiệm điều đó. Và sau đó bạn sử dụng sự phản chiếu để đặt nó (tạm thời) vào đúng và kiểm tra kịch bản khác. –
có thể giải thích bằng ví dụ nào không? bởi vì nó sẽ rất rõ ràng về khái niệm của tôi. –