最佳答案
在 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 文档引用一些观点来澄清我的问题。
选择访问级别的提示:
如果其他程序员使用您的类,则需要确保错误 访问级别可以帮助你做到这一点。使用 最严格的访问级别,对于特定的 除非有充分的理由,否则请使用 private。