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

名称反射用于描述能够检查同一系统(或其自身)中的其他代码的代码.

例如,假设您在Java中有一个未知类型的对象,并且您希望在其上调用“doSomething”方法(如果存在). Java的静态类型系统并不是真的设计为支持这个,除非对象符合已知的接口,但是使用反射,你的代码可以查看对象并找出它是否有一个名为’doSomething’的方法然后如果你调用它想要.

所以,在Java中给你一个代码示例(假设有问题的对象是foo):

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

method.invoke(foo, null);

Java中一个非常常见的用例是带注释的用法.例如,JUnit 4将使用反射来查看使用@Test注释标记的方法的类,然后在运行单元测试时调用它们.

最后,是的,这些概念在支持反射的其他静态类型语言(如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++

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值