1. 程式人生 > >java反射機制小練習

java反射機制小練習

外部程式吧位元組碼檔案的名稱儲存在配置檔案中,主函式從配置檔案讀取,進而執行外部程式。

介面:

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