リフレクション
30分プログラム、その198。Javaのリフレクション。
やることが思いつかないので、昔のプログラムをひっぱりだしてきて、お茶を濁す。動機は、
プログラム自体は成功したんだけど、使いたいプログラム(Maven2)は結局速くならなかった。何に時間がかかってるんだろう?
使い方
# 普通に起動する場合 $ java Hello mzp Hello,mzp! # 常駐プログラムで起動する $ java CLTest Hello # mainの呼び出し > mzp Hello,mzp! > hoge Hello,hoge!
ソースコード
import java.io.*; import java.lang.reflect.Method; import java.security.*; class CLTest{ class MySecurity extends SecurityManager{ public void checkExit(int exit){ throw new SecurityException(); } public void checkPermission(Permission perm){ } } public void loop(Method main){ // exitを許可しない System.setSecurityManager(new MySecurity()); BufferedReader d = new BufferedReader(new InputStreamReader(System.in)); try{ while(true){ try{ System.out.print("> "); String str = d.readLine(); main.invoke(null,new Object[]{ str.split(" ") }); }catch(Exception e){ } } }catch(Exception e){ e.printStackTrace(); } } public static void main(String args[]){ CLTest t = new CLTest(); ClassLoader cl = CLTest.class.getClassLoader(); try{ Class c = cl.loadClass(args[0]); Method method = c.getMethod("main",new Class[]{ String[].class }); t.loop(method); }catch(Exception e){ e.printStackTrace(); } } }