Trong tài liệu Java, nó đề cập rằng sử dụng phương pháp f.setAccessible(true)
chúng ta có thể vi phạm hiệu trưởng của đóng gói.Làm thế nào để ngăn chặn truy cập thông qua sự phản ánh?
Nhưng nếu tôi viết bất kỳ lớp nào có bảo mật đầy đủ, ví dụ với biến riêng tư, làm thế nào tôi có thể ngăn không cho nó bị truy cập bằng sự phản chiếu?
Ví dụ tôi có một lớp học với instance variable bảo đảm đầy đủ:
public final class Immutable {
private final int someVal;
public Immutable(int someVal) {
this.someVal = someVal;
}
public int getVal() {
return someVal;
}
}
Nhưng tôi có thể sửa đổi mà dụ biến sử dụng phản ánh như thế này:
public class Tester {
public static void main(String[] args)
throws NoSuchFieldException, SecurityException,
IllegalArgumentException, IllegalAccessException {
Immutable i = new Immutable(10);
// output 10
System.out.println(i.getVal());
Field f = i.getClass().getDeclaredField("someVal");
f.setAccessible(true);
f.set(i, 11);
// output is 11 which implies some value modified
System.out.println(i.getVal());
}
}
Trong mã của tôi, làm sao tôi có thể ngăn chặn một lớp không thay đổi được thay đổi với sự phản ánh?
vào 'SecurityManager'. –
Trừ khi bạn cho phép những người không biết thêm plugin vào thứ gì đó mà bạn đang tạo, bạn không cần phải lo lắng về điều này. Ứng dụng nào bạn đang cố gắng thực hiện? – satnam