Java反射:运行时修改意味着什么?

Java反射:运行时修改意味着什么?,java,reflection,introspection,Java,Reflection,Introspection,我正在学习Java反射API。我读了很多,使用java.lang.reflectpackage。 但还有一点我不明白:通过内省,您可以在运行时修改对象 基本上你不需要内省/反思就能做到这一点。使用简单的setter()方法,还可以在运行时修改对象。使用简单的setter和使用反射有什么区别?在这两种情况下,您可以获得相同的结果。通过反射,您可以实例化对象并调用编译时不知道的方法 假设您有一个包含类名称的文本文件。您可以使用反射来加载和实例化该类,即使在编译程序时该文件不存在 类似地,您可以使用它

我正在学习Java反射API。我读了很多,使用
java.lang.reflect
package。 但还有一点我不明白:通过内省,您可以在运行时修改对象


基本上你不需要内省/反思就能做到这一点。使用简单的setter()方法,还可以在运行时修改对象。使用简单的setter和使用反射有什么区别?在这两种情况下,您可以获得相同的结果。

通过反射,您可以实例化对象并调用编译时不知道的方法

假设您有一个包含类名称的文本文件。您可以使用反射来加载和实例化该类,即使在编译程序时该文件不存在


类似地,您可以使用它来构建类似于通用配置系统的东西,在这种系统中,您可以根据一些配置文件创建对象并设置属性,而不是使用硬编码调用(Spring是其中一种方式)。

通过反射,您可以实例化对象并调用编译时不知道的方法

假设您有一个包含类名称的文本文件。您可以使用反射来加载和实例化该类,即使在编译程序时该文件不存在


类似地,您可以使用它来构建通用配置系统之类的东西,在这些系统中,您可以根据一些配置文件创建对象并设置属性,而不是使用硬编码调用(Spring是一种方法)。

同意这一点,并理解这一部分。但您也可以使用来自客户端输入(例如来自表单)的值来构建对象。如果客户端单击按钮,将使用表单中的值创建对象。若客户端单击另一个按钮,那个么将创建对象B。因此,即使不使用反射,您仍然可以拥有编译时无法知道的动态对象。您所描述的是根据用户输入从一系列已知选项中进行选择。您的代码必须在某个地方提到每个可行的选项。我描述的是用户输入选择一个以前未知的选项。例如,用户可能会输入代码中从未提及的类的类名。同意并理解该部分。但您也可以使用来自客户端输入(例如来自表单)的值来构建对象。如果客户端单击按钮,将使用表单中的值创建对象。若客户端单击另一个按钮,那个么将创建对象B。因此,即使不使用反射,您仍然可以拥有编译时无法知道的动态对象。您所描述的是根据用户输入从一系列已知选项中进行选择。您的代码必须在某个地方提到每个可行的选项。我描述的是用户输入选择一个以前未知的选项。例如,用户可能会输入代码中从未提及的类的类名。您的“通过内省,您可以在运行时修改对象”的想法来自何方?哪位消息来源这么说,以至于你觉得通过反射修改对象与不通过反射修改对象有所不同?你的“通过内省,你可以在运行时修改对象”的想法来自哪里?哪位信息来源这样说,以至于你觉得通过反射修改对象与不通过反射修改对象有所不同?