gpt4 book ai didi

oop - Java/C#等中反射的用途是什么

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

这个问题在这里已经有了答案:





What is reflection and why is it useful?

(23 个回答)


5年前关闭。




我只是好奇,我们为什么要使用 reflection首先?

// Without reflection
Foo foo = new Foo();
foo.hello();

// With reflection
Class cls = Class.forName("Foo");
Object foo = cls.newInstance();
Method method = cls.getMethod("hello", null);
method.invoke(foo, null);

我们可以简单地创建一个对象并调用类的方法,但为什么要使用 forName、newInstance 和 getMthod 函数做同样的事情呢?

让一切充满活力?

最佳答案

简单地说:因为有时您在编译时不知道“Foo”或“hello”部分。

绝大多数时候你都知道这一点,所以不值得使用反射。然而,只是偶尔,你不会——在那个时候,你可以求助于反射(reflection)。

例如,protocol buffers允许您生成包含用于读取和写入消息的完整静态类型代码的代码,或者生成足够的代码以便其余部分可以通过反射完成:在反射情况下,加载/保存代码必须获取和设置属性通过反射 - 由于消息描述符,它知道所涉及的属性的名称。这会慢很多(很多),但会导致生成的代码要少得多。

另一个例子是依赖注入(inject),其中用于依赖的类型的名称通常在配置文件中提供:然后 DI 框架必须使用反射来构造所有涉及的组件,并在此过程中查找构造函数和/或属性。

关于oop - Java/C#等中反射的用途是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2488531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com