java反射机制~应用demo

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/han_xiaoxue/article/details/79227680

Java反射机制实在运行状态中,对任意一个类,都能够知道这个类的属性和方法。
这种动态调用方法和获取信息的功能可以被称为java的反射机制。

好处显而易见,提高应用程序的扩展性。

说的通俗一点,就是你在开发时候,不知道未来可能会需要添加什么新功能,但是你又比较懒,希望添加新功能后,尽可能少的更改原代码。最好不要改变原始逻辑。那在这种,你并不知道未来会发生什么的情况下,怎么办呢,用反射。
先用图展现下反射的原理。
这里写图片描述
举个栗子:
假如你有一个动物园,你刚开办动物园的时候,动物并不多,只有一条狗。
那你这样写:

public class Zoo {
    public void run(){
        dog d = new dog();
        d.eat();
        d.sleep();
    }
}

过几天你又有一只猫,你怎么办?
那你的代码可能得这样了:

public class Zoo {
    public void run(){
        dog d = new dog();
        d.eat();
        d.sleep();

        cat c = new cat();
        c.eat();
        c.sleep();
    }
}

过几天你又有了猴子、老虎。。。又来了一百个动物,你还这样么?写一百遍?
那当然不能啊。
那么我们就可以用反射,来实现。首先你弄个接口,叫AnimalInterface,无论是狗还是猫,都是动物啊。

public interface AnimalInterface {
    public void eat();
    public void sleep();
}

然后你让狗实现这个接口。

public class dog implements AnimalInterface {
    @Override
    public void sleep() {
        System.out.println("dog sleeping...");
    }
    @Override
    public void eat() {
        System.out.println("dog eating...");
    }
}

然后,你的动物园,就可以用多态了啊。

public class Zoo {
    public void run(AnimalInterface animal){
        animal.eat();
        animal.sleep();
    }
}

这里写图片描述
配置文件里,放你需要跑的类名。以逗号隔开

list=net.hxxtest.fanshedemo.impleClass.dog,net.hxxtest.fanshedemo.impleClass.cat

下面看一下主函数

public static void main(String[] args)throws Exception{
        Zoo z = new Zoo();//创建你的动物园
        //读取配置文件
        ResourceBundle rb = ResourceBundle.getBundle("animalsFile");
        String animalList = rb.getString("list");
        String[] strArray  = animalList.split(",");
        //将你添加的动物,遍历出来
        for(int i=0;i<strArray.length;i++){
            String animalName= strArray[i];
            //找寻该动物类文件,并加载进内存,产生class对象
            Class c = Class.forName(animalName);
            //生成该动物对象
            AnimalInterface obj = (AnimalInterface)c.newInstance();
            z.run(obj);
        }
    }

代码改成这样之后,就可以保证,你新添加动物时,不用改任何代码,只需要在配置文件上,假如你新增的动物就OK了。

项目代码下载地址:https://github.com/weiaiwan/fanshedemo

猜你喜欢

转载自blog.csdn.net/han_xiaoxue/article/details/79227680
今日推荐