Classクラスの有用性がいまいちピンとこない。
なので、便利だなーと思ったことを、これから、このブログで順次挙げてくことにする。
まず今回はその一つめ。
〜クラス名の文字列から、そのクラスのオブジェクトを生成する。〜


Class mycls = Class.forName("MyClass");
Object obj = mycls.newInstance();
MyClass newObject = (MyClass) obj;
というふうにすれば"MyClass"という文字列からその名前のオブジェクトを生成できる。
この方法を使うと以下のようなプログラムデザインが可能。


public class Sample{
public static void main(String args[]) throws Exception{
String classname = args[0];
Class myCls = Class.forName(classname);
Object obj = myCls.newInstance();
MyInterface mi = (MyInterface) obj;
mi.printMessage();
}
}
interface MyInterface{
public void printMessage();
}
class ClassA implements MyInterface{
public void printMessage(){
System.out.println("I am ClassA");
}
}
class ClassB implements MyInterface{
public void printMessage(){
System.out.println("I am ClassB");
}
}
以上のプログラムはコマンドラインでクラス名ClassA or ClassBをargs[0]として、生成するオブジェクトを選択できることを示す例。
今回はコマンドラインからクラス名を与えたが、設定ファイルを用意し、それをこのプログラムに(ResourceBundleクラス等使って)読み込ませる事で、プログラムの挙動を操作する・・・なんてこともできる。
このことは、後にPolymorphismに威力を発揮する。