Class.forNameはどう書くのか

INDEX PAGE


Class.forNameはどう書くのか



例えばJavaJDBCドライバーを利用するとき
各DBごとに実装されたドライバーを利用するに当たって
下のような書き方をします。

Class.forName("oracle.jdbc.driver.OracleDriver");

http://www.site-cooler.com/java/jdbc/index.htm

同じように、Ruby多態性ポリモーフィズム)を利用して
実行ロジックを切り替えたいときにはどうすればよいのか。


この用に書けばよいようです。

eval("ClassName")

さらにJavaなら

instance = (iNterFace) Class.forName("ClassName").newInstance();

と書くところは

instance = eval("ClassName").new

と書けばよいようです。
下のサイトが参考になりました。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/9677


evalはどうやらコンパイラの機能なのですが
うまく利用すればきちんと使えるようです。
http://ja.wikipedia.org/wiki/Eval

なお、指定したクラスが存在しないときには
つまりJavaの"ClassNotFoundException"と対応するものとして
"NameError"というエラーが発生します。

INDEX PAGE