核心反射机制(core reflection facility)java.lang.reflect,提供了“通过程序来访问关于已装载的类的信息”的能力。
丧失了编译时类型检查的好处,包括异常检查。
执行反射访问所需要的代码非常笨拙和冗长。
性能损失。
反射功能只是在设计时(design time)被用到。通常,普通应用程序在运行时不应该以反射方式访问对象。
如果只是以非常有限的形式使用反射机制,虽然也要付出少许代价,但是可以获得许多好处。对于有些程序,它们必须用到在编译时无法获取的类,但是在编译时存在适当的接口或者超类,通过它们可以引用这个类(见第52条)。如果是这种情况,就可以以反射方式创建实例,然后通过它们的接口或者超类,以正常的方式访问这些实例。
简而言之,反射机制是一种功能强大的机制,对于特定的复杂系统编程任务,它是非常必要的,但它也有一些缺点。如果你编写的程序必须要与编译时未知的类一起工作,如有可能,就应该仅仅使用反射机制来实例化对象,而访问对象时则使用编译时已知的某个接口或者超类。