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

forName的问题,很复杂
里面的参数是任何一个自定义类的名字

我现在遇到的问题是,,

不知道如何调用类的方法,,

因为可以是任何类,类里面的方法名字不一样,这样的情况怎么办,帮忙

------解决方案--------------------
你可以先Class.isAssignableFrom(Class clazz)判断是否你要的类
再Method[] getDeclaredMethods()

------解决方案--------------------
关键是你要用在哪,怎么用?
如果说你要做的目的是,在一个统一平台上动态加载模块。那么应该让每个模块都实现一个接口比如IForAssembly 这样代码类似:
try {
final Class c = Class.forName(aString);
//实例化新的组件。
IForAssembly ifa = (IForAssembly) c.newInstance();
//依次处理要新显示的组件。
ifa.init();
ifa.doMore(chooser);
} catch (Exception e) {
System.out.println( "显示业务组件的时候出现错误! " + aString);
e.printStackTrace();
}
这样做的前提是,之前有个规划。如果类已经写好了,大家用的名字都不一样,那么代码可改的话就在每个模块在写个类实现接口,在那个新类里把要做的事情做完,然后把这个类作为入口类。要是来年代码也不能改,那只能说利用一个 [类 -- 方法]映射表来做,反射类之前,先看这个类在不在映射表中,如果在就反射,然后再查询这个类对应的应该运行什么方法,还给把方法参数也搞好,然后再利用invoke执行方法。不过代码写成这样太丑陋了。


------解决方案--------------------
如果确实需要最大的灵活性,那应该使作JAVA的reflection,在运行时获得并调用类的方法。
------解决方案--------------------
可否用多态呢