3.3.1 反射构造基础

Class.newInstance() 方法可以创建一个该 Class 对象表示的类的实例,该方法效果与使用 new 调用 无参构造函数 相同,即 X.class.newInstance() 等价于 new X()

不同之处在于,newInstance 可以使用 forName 获取的 Class 调用,即调用 newInstance 方法的 Class 对象可以 运行时可知,而不必在 编译时 可知。

custDB = (CustomerDatabase) cls.newInstance();
  • 因为 cls 是通过读取配置文件,在运行时才创建的,所以只能通过 newInstance 来构造。
  • CustomerDatabase 是接口,定义了应用需要的所有数据库操作服务,任何 实现了该接口的类都可以使用。
    • 设计模式推荐:面向接口,而非实现编程
    • 如果不适用接口,则该方案 完全无法实现,因为无法改变数据库服务的实现类。

newInstance 异常

  1. ClassNotFoundException
    • 配置文件指定的类不存在。
  2. InstantiationException
    • 构造函数执行失败。
  3. IllegalAccessException
    • 在调用上下文中,无参构造函数 没有访问权限。

results matching ""

    No results matching ""