博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反射的一个小实例
阅读量:4994 次
发布时间:2019-06-12

本文共 2209 字,大约阅读时间需要 7 分钟。

public class NoteBook {        /*     * 运行功能     */        public void run(){        System.out.println("notebook run");    }        /*     * 使用usb设备     */        public void useUSB(USB usb){        if(usb!=null){            usb.open();            usb.close();        }    }    }
public interface USB {        /*     * 定义开启     */        void close();        /*     * 定义开启     */        void open();    }
public class KeyByUSB implements USB {    @Override    public void close() {        System.out.println("key close");    }    @Override    public void open() {        System.out.println("key open");    }}
public class MouseByUSB implements USB {    @Override    public void close() {        System.out.println("mouse close");    }    @Override    public void open() {        System.out.println("mouse open");    }}
import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.util.Properties;public class NoteBookMain {    public static void main(String[] args) throws IOException, Exception {                NoteBook book = new NoteBook();        book.run();        book.useUSB(null);        //因为有了鼠标,所以需要在源程序中创建鼠标对象并传递给笔记本。        //希望后期出现了设备后,可不可以不用修改NoteBook的代码,还可以不断加入新设备。//        book.useUSB(new MouseByUSB());通过反射来解决问题                //对外提供配置文件        File configFile = new File("usb.properties");        if(!configFile.exists()){            configFile.createNewFile();        }                //读取流和配置文件相关联        FileInputStream fis = new FileInputStream(configFile);                Properties prop = new Properties();                prop.load(fis);                for(int x = 1; x <= prop.size();x++){                        String className = prop.getProperty("usb"+x);                        //对指定的类进行加载            Class clazz = Class.forName(className);                        USB usb = (USB)(clazz.newInstance());                        book.useUSB(usb);                                }                fis.close();                            }}

usb.properties配置文件的内容如下:

usb1=cn.qujianlei.reflect.notebooktest.MouseByUSB

usb2=cn.qujianlei.reflect.notebooktest.KeyByUSB

后期新增设备就不需要修改源代码,而用修改配置文件的方式来完成,增加了程序的扩展性。

转载于:https://www.cnblogs.com/qjlbky/p/5929493.html

你可能感兴趣的文章
Linux学习第六篇之文件处理命令ln(链接命令)
查看>>
thinkphp5 tp5 七牛云 上传图片
查看>>
VM下Linux网卡丢失(pcnet32 device eth0 does not seem to be ...)解决方案
查看>>
第一阶段意见汇总以及改进
查看>>
再说virtual
查看>>
随笔:技术流可以这样写博客
查看>>
[优化]JavaScript 格式化带有占位符字符串
查看>>
打JAR包
查看>>
大图轮播
查看>>
UNIX环境高级编程读书笔记
查看>>
java awt 乱码问题
查看>>
矩阵中的路径
查看>>
unity回调函数范例
查看>>
linux下给php安装curl、gd(ubuntu)
查看>>
Java自带的Logger使用-代码摘要
查看>>
Java设计模式系列 — 构造器模式
查看>>
MySQL执行计划explain的key_len解析
查看>>
Windows Phone开发(9):关于页面状态 转:http://blog.csdn.net/tcjiaan/article/details/7292160...
查看>>
android 通过数组,流播放声音的方法
查看>>
Spring入门篇
查看>>