java反射機制小練習
阿新 • • 發佈:2018-11-09
外部程式吧位元組碼檔案的名稱儲存在配置檔案中,主函式從配置檔案讀取,進而執行外部程式。
介面:
package cn.itcast.reflecttest.demo;
//介面
public interface Pic {
public void open();
public void close();
}
主機板:
package cn.itcast.reflecttest.demo; //主機板 public class MainBord { public MainBord() { super(); System.out.println("MainBord run...."); } public void show(Pic pic) { pic.open(); pic.close(); } }
內部程式:
package cn.itcast.reflecttest.demo; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class ReflectTest { public static void main(String[] args) throws IOException, Exception { //建立面板物件 MainBord mb=new MainBord(); //建立配置檔案物件 File configfile=new File("pic.properties"); //建立集合 Properties pr=new Properties(); //讀取配置檔案 FileInputStream in=new FileInputStream(configfile); //將配置檔案載入到集合中 pr.load(in); for(int i=0;i<pr.size();i++) { //獲取位元組碼檔案的名稱 String string=pr.getProperty("coonc"+(i+1)); //建立位元組碼檔案物件 Class cc=Class.forName(string); //建立外設物件 Pic pic=(Pic)cc.newInstance(); //執行 mb.show(pic); } } }
外部程式1:
package cn.itcast.reflecttest.demo;
//外部程式
public class Sound implements Pic {
@Override
public void open() {
System.out.println("sound run....");
}
@Override
public void close() {
System.out.println("sound run...");
}
}
外部程式2:
package cn.itcast.reflecttest.demo; public class Keybord implements Pic { @Override public void open() { System.out.println("keybord open...."); } @Override public void close() { System.out.println("keybord close...."); } }
配置檔案:pic.properties
coonc1=cn.itcast.reflecttest.demo.Sound
coonc2=cn.itcast.reflecttest.demo.Keybord