Java:什么情况需要使用反射?

因此,通过阅读一些文章,我得到的信息是能够实时修改字段并为类设置值,而无需重新编译。

所以有可能对没有源代码的第三方Java库创建的类执行此操作/是否可以在运行时使用反射来修改类实例?

在其他哪些情况下,通常还会使用反射?

我试图了解反射如何适用。

回答:

任何时候您在运行时处理字符串,并希望将该字符串的一部分视为语言中的标识符。

  1. 远程过程调用-将通过网络接收的消息的一部分视为方法名称。
  2. 序列化和反序列化-将字段名称转换为字符串,以便您可以将对象的字段写入流,然后再将其转换回对象。
  3. 对象关系映射-维护对象中的字段与数据库中的列之间的关系。
  4. 具有动态类型的脚本语言的接口-将脚本语言产生的字符串值转换为对对象上的字段或方法的引用。

它也可以用于允许以语言模拟语言功能。考虑java

com.example.MyClass将字符串转换为类名的命令行。这不需要反射,因为java可执行文件可以将.class文件转换为代码,但是如果没有反射,它将无法在其参数的委托写入java

com.example.Wrapper com.example.MyClass位置Wrapper,如下所示:

class Wrapper {

public static void main(String... argv) throws Exception {

// Do some initialization or other work.

Class<?> delegate = Class.forName(argv[0]);

Method main = delegate.getMethod("main", String[].class);

main.apply(null, Arrays.asList(argv).subList(1, argv.length).toArray(argv));

}

}

以上是 Java:什么情况需要使用反射? 的全部内容, 来源链接: utcz.com/qa/425580.html

回到顶部