public class ReflectTest {
public static void main(String[] args) throws Exception {
Class clazz = null;
Method method = null;
clazz = Class.forName("com.jas.reflect.Fruit");
Constructor<Fruit> fruitConstructor = clazz.getConstructor(String.class);
Fruit fruit = fruitConstructor.newInstance("Apple"); //创建有参对象实例
method = clazz.getMethod("show",null); //获取空参数 show 方法
method.invoke(fruit,null); //执行无参方法
method = clazz.getMethod("show",int.class); //获取有参 show 方法
method.invoke(fruit,20); //执行有参方法
}
}
class Fruit{
private String type;
public Fruit(String type){
this.type = type;
}
public void show(){
System.out.println("Fruit type = " + type);
}
public void show(int num){
System.out.println("Fruit type = " + type + ".....Fruit num = " + num);
}
}
输出:
Fruit type = Apple
Fruit type = Apple…..Fruit num = 20
public class ReflectTest {
public static void main(String[] args) throws Exception {
Fruit fruit = BasicFactory.getFactory().newInstance(Fruit.class);
System.out.println(fruit);
}
}
输出
com.jas.reflect.Apple@4554617c
上面这个实例通过一个工厂创建不同对象的实例,通过这种方式可以降低代码的耦合度,代码得到了很大程度的扩展,以前要创建 Apple 对象需要通过 new 关键字创建 Apple 对象,如果我们也要创建 Orange 对象呢?是不是也要通过 new 关键字创建实例并向上转型为 Fruit ,这样做是麻烦的。