如何通过反射创建对象
1、当拿到一个类的时候,肯定要直接使用关键字new进行对象的实例化操作,这属于习惯性的做法,但是有了Class类对象,那么就可以做到,利用反射来实现对象实例化操作:
2、实例化对象的方法:package com.gwolf.crud.utils;import com.gwolf.crud.bean.Book;public class TestDemo { public static void main(String[] args) throws Exception { Class<?> cls = Class.forName("com.gwolf.crud.bean.Book"); Object obj = cls.newInstance(); Book book = (Book)obj; System.out.println(book); }}
3、有了反射之后,以后进行对象实例化的操作不在只是单独的依靠关键字new完成了,反射也同样可以完成,但是并不表示new就被完全取代了。
4、在任何的开发之中,new是造成耦合的最大元凶,一起的耦合都起源于new。我们以工厂方法为例:
5、接下来如果Car要增加一个子类,我们就意味着要更改工厂类。每增加一个类就要去修改工厂类,那么如果随时要增加子类。因为现在工厂类中的对照滠跋诵象都是通过关键字new直接实例化的。要解决这个问题就只能依靠反射完成。package com.gwolf.crud.utils;import com.gwolf.crud.bean.Car;public class SimpleFactory { public static Car createCar(String className) throws Exception { Car car = null; car = (Car)Class.forName(className).newInstance(); return car; } }
6、此时的程序就真正的完成了解耦合的目的,而且可扩展性非常的强。