***

1327 ワード

Class.forName()がクラスのクラスタイプを得ることができることはすでに知られていますが、JDBCでデータベースドライバをロードするなど、クラスの動的ロードを実現することもできます.クラスのロードには、コンパイル時にロードするのは静的ロードクラスであり、実行時にロードするのは動的ロードであるという2つの方法があります.動的ロードは、ソースコードのコンパイル中に一時的に使用できないクラスを欠落させることができ、プロジェクトが一定のフェーズに実行されるまで呼び出す必要がある場合にロードされます.動的ロードにより、プロジェクトのメンテナンスが簡単になります.実装された新しい機能は、元のコードを変更することなく動的にロードできます.次に、例を示します.
package reflectTest;

public class Office {
	public static void main(String[] args){
		try{
			//     ,       
			Class c = Class.forName(args[0]);
			//     ,      
			OfficeAble oa = (OfficeAble)c.newInstance();
			oa.start();
		}catch(Exception e){
			e.printStackTrace();
		}
	}

}
//    
interface OfficeAble{
	public void start();
}
//  Word 
class Word implements OfficeAble{

	@Override
	public void start() {
		// TODO Auto-generated method stub
		System.out.println("start Word...");
	}
	
}
//  Excel 
class Excel implements OfficeAble{

	@Override
	public void start() {
		// TODO Auto-generated method stub
		System.out.println("start Excel...");
	}
	
}
上記の例を分析すると、実行時にパラメータをWordと入力すると、Wordクラスが動的にロードされ、start Wordが印刷出力されます….この場合、Excelクラスが実現していない場合、プログラムの実行はエラーを報告しません.Excelクラスはロードされないので、同じように実行時に入力パラメータがExcelで、処理過程は同じです.また、Officeを拡張するには、PowerPointなどの機能を追加するのも簡単です.PowerPointクラスを実現すれば、Officeクラスは何も変更しなくてもいいです.
実行時にパラメータPowerPointに入力して提供する機能.