File tree Expand file tree Collapse file tree 1 file changed +24
-0
lines changed
Filter options
Expand file tree Collapse file tree 1 file changed +24
-0
lines changed
Original file line number Diff line number Diff line change
1
+ # What is reflection, and why is it useful?
2
+
3
+ ##问题描述
4
+ 反射是什么,为什么它是有用的?
5
+ 我特别感兴趣的是java,但我认为任何语言的原理都是相同的。
6
+
7
+ ##回答
8
+ 反射是被用来描述代码的,可以检查同一系统(或者自身)的其他代码。
9
+
10
+ 举个例子,在java中你有一个不知道具体类型的对象,并且你可能会调用它的dosomething的方法(如果存在的话)java的静态类型系统并没有设计来支持此用法,除非对象符合已知的接口。但是用反射,你的代码能查看对象,并找出一个dosomething的方法(如果有的话),然后你可以调用他。
11
+ 因此,一个例子如下(想象在问题中的对象foo):
12
+ ```
13
+ Method method = foo.getClass().getMethod("dosomething",null);
14
+ method.invoke(foo,null); //调用foo的dosomething方法
15
+ ```
16
+ java中一个非常常见的用例是使用注释。JUnit 4,举个例子,将使用反射来浏览你的标记有@test 注释的类方法,之后当运行测试单元时进行调用。
17
+
18
+ [ 有很多好的反射例子,可以用来入门] ( http://docs.oracle.com/javase/tutorial/reflect/index.html )
19
+
20
+ 最后,其概念在其他支持反射的静态类型语言中是非常相似的。在动态语言中,上面描述的用例并不是必要的(因为编译器允许任何方法都能被任何对象调用,在运行时如果不存在就会失败),但是第二种情况,寻找能以某种确定的方式工作的方法任然是常见的。
21
+
22
+ [ 原文链接:What is reflection, and why is it useful?] ( http://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful )
23
+
24
+
You can’t perform that action at this time.
0 commit comments