gpt4 book ai didi

java - 什么是反射以及为什么它有用?

转载 作者:行者123 更新时间:2023-12-02 03:31:02 25 4
gpt4 key购买 nike

什么是反射,为什么它有用?

我对 Java 特别感兴趣,但我认为任何语言的原理都是相同的。

最佳答案

名称反射用于描述能够检查同一系统(或其自身)中的其他代码的代码。

例如,假设您有一个 Java 中未知类型的对象,并且您希望对其调用“doSomething”方法(如果存在)。 Java 的静态类型系统并不是真正设计来支持这一点,除非对象符合已知的接口(interface),但是使用反射,您的代码可以查看该对象并找出它是否有一个名为“doSomething”的方法,然后在您需要的情况下调用它想要。

因此,给您一个 Java 代码示例(假设有问题的对象是 foo):

Method method = foo.getClass().getMethod("doSomething", null);
method.invoke(foo, null);

Java 中一个非常常见的用例是使用注释。例如,JUnit 4 将使用反射来查找类中带有 @Test 注释标记的方法,然后在运行单元测试时调用它们。

有一些很好的反射(reflection)示例可以帮助您从 http://docs.oracle.com/javase/tutorial/reflect/index.html 开始。

最后,是的,这些概念在其他支持反射的静态类型语言(如 C#)中非常相似。在动态类型语言中,上述用例不太必要(因为编译器将允许在任何对象上调用任何方法,如果不存在则在运行时失败),但第二种情况是查找标记或以某种方式工作仍然很常见。

评论更新:

The ability to inspect the code in the system and see object types is not reflection, but rather Type Introspection. Reflection is then the ability to make modifications at runtime by making use of introspection. The distinction is necessary here as some languages support introspection, but do not support reflection. One such example is C++

关于java - 什么是反射以及为什么它有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56884163/

25 4 0