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#)中非常相似.在动态类型语言中,上面描述的用例不太必要(因为编译器将允许在任何对象上调用任何方法,如果它不存在则在运行时失败),但第二种情况是查找标记的方法或以某种方式工作仍然很常见.
评论更新:
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,reflection,terminology 来源: https://codeday.me/bug/20190911/1802774.html