日期:2014-05-20  浏览次数:20629 次

动态加载方法
请问有一个字符串a= "QQ ";
我想用方法:form.QQ()
也就是字符串a,a是可变的,
简单来说当a= "QQ "   我用方法form.QQ()
                    a= "WW "   我用方法form.WW()
怎么实现??


------解决方案--------------------
http://www.j2medev.com/Article/Class3/Class7/200604/1995.html
看看篇候捷写的,你就能完全明白了

------解决方案--------------------
运行时调用methods

这个动作和上述调用“带参数之ctor”相当类似。首先准备一个Class[]做为ctor的参数类型(本例指定其中一个是String,另一个是Hashtable),然后以此为自变量调用getMethod(),获得特定的Method object。接下来准备一个Object[]放置自变量,然后调用上述所得之特定Method object的invoke(),如图8。知道为什么索取Method object时不需指定回返类型吗?因为method overloading机制要求signature(署名式)必须唯一,而回返类型并非signature的一个成份。换句话说,只要指定了method名称和参数列,就一定指出了一个独一无二的method。



#001 public String func(String s, Hashtable ht)

#002 {

#003 …System.out.println( "func invoked "); return s;

#004 }

#005 public static void main(String args[])

#006 {

#007 Class c = Class.forName( "Test ");

#008 Class ptypes[] = new Class[2];

#009 ptypes[0] = Class.forName( "java.lang.String ");

#010 ptypes[1] = Class.forName( "java.util.Hashtable ");

#011 Method m = c.getMethod( "func ",ptypes);

#012 Test obj = new Test();

#013 Object args[] = new Object[2];

#014 arg[0] = new String( "Hello,world ");

#015 arg[1] = null;

#016 Object r = m.invoke(obj, arg);

#017 Integer rval = (String)r;

#018 System.out.println(rval);

#019 }


------解决方案--------------------
blog 更新:
think in java 章后练习答案.....
http://blog.csdn.net/heimaoxiaozi/
------解决方案--------------------
学习一下大家的经验。。。