什么是反思,为什么它是有用的?

问题:

什么是反思,为什么它是有用的?
我对Java特别感兴趣,但我认为任何语言的原则是一样的。

回答:

名称反射用于描述能够检查同一系统(或其自身)中的其他代码的代码。
例如,假设您在Java中有一个未知类型的对象,并且您想要调用一个“doSomething”方法(如果存在)。 Java的静态打字系统并不是真正的设计来支持这一点,除非对象符合一个已知的接口,但是使用反射,您的代码可以查看对象,并找出是否有一个名为“doSomething”的方法,然后调用它想要。
所以,给你一个Java的代码示例(假设对象是foo):

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

Java中一个非常常见的用例是使用注释。例如,JUnit 4将使用反射来查看通过类标签的@Test注释的方法,然后在运行单元测试时调用它们。
有一些很好的反思例子让你从http://docs.oracle.com/javase/tutorial/reflect/index.html开始
最后,是的,这些概念在支持反射的其他静态类型语言(如C#)中几乎相似。在动态类型语言中,上述用例不太必要(因为编译器将允许在任何对象上调用任何方法,如果不存在则在运行时失败),但是第二种情况是寻找被标记或以某种方式工作还是很常见的。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: What is reflection and why is it useful?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 44 = 52