原文链接

反射,是在运行时,而非编译时,动态获取类型的信息。比如接口信息、成员信息、方法信息、构造方法信息等,根据这些动态获取到的信息来创建对象、访问/修改成员、调用方法等。

慎用反射

反射虽然是灵活的,但一般情况下,并不是我们优先建议的,主要原因是:

  • 反射更容易出现运行时错误,使用显式的类和接口,编译器能帮我们做类型检查,减少错误,但使用反射,类型是运行时才知道的,编译器无能为力
  • 反射的性能要低一些,在访问字段、调用方法前,反射先要查找对应的Field/Method,性能要慢一些

简单的说,如果能用接口实现同样的灵活性,就不要使用反射。