使用反射时需要注意哪些潜在问题.我在反思中非常困惑,为什么java提供这种类型的功能来访问私有数据成员.
私有: 就像我想的那样,只有声明它的类才能看到它.
那为什么有可能访问其他类的私人事物?这个术语(反射)完全溢出了我在java中的private(Access Specifier)属性的概念.
我访问了许多有关此主题的链接,但没有给出关于此主题的完整说明.例如:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
请详细解释这种方法的情景?我需要其他类中私有方法可访问性的优点和缺点吗?
小智 1
所有“私有”和其他形式的声明都是开发工具的标志,以便它知道您打算如何使用相关字段或方法。这样,当开发人员以非预期的方式使用这些类/字段/方法时,开发工具可以向开发人员发出警告或错误。
反射是一种工具,它可以让开发人员忽略或规避这些标志,这些标志表明您正在以从未想过的方式使用类/字段/方法。所以总的来说,反射显示出糟糕的架构。
因此,将某事物声明为私有、公共或静态并没有“优点或缺点”;它们只是帮助保持代码整洁和分隔的工具,仅允许开发人员以特定方式访问/使用您的类/字段/方法。