私有方法真的安全吗?
在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();
现在,这包含了上面需要做的所有事情。我的问题是,有没有办法避免使用Java反射做这种事情?method[]
我引用了Java文档中的一些观点来澄清我的问题。
有关选择访问级别的提示:
如果其他程序员使用您的类,您希望确保不会发生误用错误。访问级别可以帮助您执行此操作。使用对特定成员有意义的最严格的访问级别。除非您有充分的理由不使用,否则请使用私有。