Private 就是 Private,那为什么 java 可以方便地使用反射来访问私有方法呢?
Private is Private, then Why java give facility to access private method using reflection?
使用反射需要注意哪些潜在问题。
我在反思中很困惑,为什么java提供这种访问私有数据成员的功能。
私人:
就像我想的那样,只有声明它的 class 才能看到它。
那为什么可以访问其他class中的私有内容?
这个术语(反射)完全溢出了我在 java.
中的私有(访问说明符)属性的概念
我访问了很多关于这个主题的链接,但没有给出关于这个主题的完整解释。
例如:
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);
}
}
所以请深入解释这种方法的场景?
我需要其他 class?
中私有方法可访问性的优点和缺点
所有 "Private" 和其他形式的声明都是,是开发工具的标志,以便它知道您打算如何使用有问题的字段或方法。这样一来,当开发人员以非预期的方式使用这些 classes/fields/methods 时,开发工具可以向他们发出警告或错误。
Reflection 是一种允许开发人员忽略或规避这些标志的工具,这些标志表明您正在以一种从未有过的方式使用 class/field/method。所以总的来说,反射显示出糟糕的架构。
所以没有 "advantages or disadvantages" 将某物声明为私有或 public 或静态;它们只是通过仅允许开发人员以特定方式 access/use 您的 classes/fields/methods 来帮助保持代码清洁和划分的工具。
在大多数情况下,访问修饰符旨在帮助隐藏您不希望人们绑定的部分代码。从工具的角度来看,使用反射访问私有方法的能力非常有用。 Java 具有允许禁用此功能的安全机制。 site 有一些关于 java 与反射相关的安全模型的信息(页面底部。)
这仅在您的代码将使用不受信任的代码执行的情况下才真正重要。如果其他开发人员可以访问您的代码或拥有您的库,那么在没有安全管理器或更改修饰符的情况下,您无法阻止他们 运行 代码。这仅在受控环境中有效。
使用反射需要注意哪些潜在问题。 我在反思中很困惑,为什么java提供这种访问私有数据成员的功能。
私人: 就像我想的那样,只有声明它的 class 才能看到它。
那为什么可以访问其他class中的私有内容? 这个术语(反射)完全溢出了我在 java.
中的私有(访问说明符)属性的概念我访问了很多关于这个主题的链接,但没有给出关于这个主题的完整解释。 例如:
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);
}
}
所以请深入解释这种方法的场景? 我需要其他 class?
中私有方法可访问性的优点和缺点所有 "Private" 和其他形式的声明都是,是开发工具的标志,以便它知道您打算如何使用有问题的字段或方法。这样一来,当开发人员以非预期的方式使用这些 classes/fields/methods 时,开发工具可以向他们发出警告或错误。
Reflection 是一种允许开发人员忽略或规避这些标志的工具,这些标志表明您正在以一种从未有过的方式使用 class/field/method。所以总的来说,反射显示出糟糕的架构。
所以没有 "advantages or disadvantages" 将某物声明为私有或 public 或静态;它们只是通过仅允许开发人员以特定方式 access/use 您的 classes/fields/methods 来帮助保持代码清洁和划分的工具。
在大多数情况下,访问修饰符旨在帮助隐藏您不希望人们绑定的部分代码。从工具的角度来看,使用反射访问私有方法的能力非常有用。 Java 具有允许禁用此功能的安全机制。 site 有一些关于 java 与反射相关的安全模型的信息(页面底部。)
这仅在您的代码将使用不受信任的代码执行的情况下才真正重要。如果其他开发人员可以访问您的代码或拥有您的库,那么在没有安全管理器或更改修饰符的情况下,您无法阻止他们 运行 代码。这仅在受控环境中有效。