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

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

我对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#)中非常相似。在动态类型语言中,上述用例不太必要(因为编译器将允许在任何对象上调用任何方法,如果不存在则在运行时失败),但是第二种情况是查找标记或工作在一定的方式仍然是常见的。

转载注明原文:java – 什么是反射,为什么它有用? - 代码日志