您是否考虑过这些问题: IDE 如何列出类的所有详细信息,包括私有字段和私有方法? IDE 还能够 列出 JAR 文件中的类(及其详细信息),它们是如何做到的?
下面是反射的一些例子。
本文将阐述如何在编程中应用反射,以及如何在高级抽象中应用反射。我们将从一个十分简单的例子 入手,然后创建一个简单的程序来使用反射。
什么是反射?
反射是一种机制,它允许动态地发现和绑定类、方法、字段,以及由语言组成的所有其他元素。列出 类、字段和方法只是反射的基本应用。通过反射,我们实际上还能够在需要时创建实例、调用方法以及访 问字段。
大多数程序员曾使用过动态类载入技术来载入他们的 JDBC 驱动程序。这种载入方法类似于下面这一 段动态载入 MySQL JDBC 驱动程序实例的代码片段:
Class.forName("com.mysql.jdbc.Driver").newInstance();
使用反射的原因和时机
反射提供了一个高级别的抽象。换句话说,反射允许我们在运行时对手头上的对象进行检查并进行相 应的操作。例如,如果您必须在多种对象上执行相同的任务,如搜索某个实例。则可以为每种不同的对象 编写一些代码,也可以使用反射。或许您已经意识到了,反射可以减少近似代码的维护量。因为使用了反 射,您的实例搜索代码将会对其他类起作用。我们稍后会谈到这个示例。我已经将它加入到这篇文章里, 以便向您展示我们如何从反射中获益。
动态发现
下面我们从发现一个类的内容并列出它的构造、字段、方法开始。这并不实用,但它能让我们直观地 了解反射 API 的原理及其他内容。
创建 Product 类,如下所示。我们的所有示例都保存在名为 ria 的程序包中。
package ria;
public class Product {
private String description;
private long id;
private String name;
private double price;
//Getters and setters are omitted for shortness
}