JAVA反射机制,一般通过接口和一个配置文件实现,一般用XML文件,本例子用properties文件实现。例子大意:在电脑上有声卡,网卡,等等,这些卡都有打开和关闭等功能,而这些功能可以抽取出来做成接口。
首先定义一个声卡类,声卡类中有打开和关闭两个功能,而网卡中也有这样的功能,所以将这两个功能抽取成接口,可以供其他卡实现
public interface PCI {
public abstract void open();
public abstract void close();
}
public class SoundCard implements PCI {
public void open(){
System.out.println("声卡打开。。。");
}
public void close(){
System.out.println("声卡关闭。。。");
}
}
在定义主板类
public class MainBoard {
public void usePCI(PCI p){
p.open();
p.close();
}
}
测试类
public class Test {
public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException {
// TODO Auto-generated method stub
MainBoard mainBoard = new MainBoard();
File f = new File("pci.properties");
FileInputStream fis = new FileInputStream(f);
Properties pro = new Properties();
pro.load(fis);
for(int i=0;i<pro.size();i++){
String pciName = pro.getProperty("pci"+i);
Class clazz = Class.forName(pciName);
PCI p= (PCI)clazz.newInstance();
mainBoard.usePCI(p);
}
}
}
而此时只需在properties文件中配置声卡的全类名pci0=reflect.test.SoundCard。
若此时想要增加网卡,只需网卡类把PCI接口实现,然后在配置文件中增加pci1=reflect.test.NetCard配置
public class NetCard implements PCI {
@Override
public void open() {
// TODO Auto-generated method stub
System.out.println("网卡打开。。。。。。。。");
}
@Override
public void close() {
// TODO Auto-generated method stub
System.out.println("网卡关闭。。。。。。。。");
}
}
运行结果:
总结:JAVA的反射机制增加了程序的可扩展性。对于框架的理解有帮助。