forName的问题,很复杂 里面的参数是任何一个自定义类的名字我现在遇到的问题是,,不知道如何调用类的方法,,因为可以是任何类,类里面的方法名字不一样,这样的情况怎么办,帮忙 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以先Class.isAssignableFrom(Class clazz)判断是否你要的类再Method[] getDeclaredMethods() import mypackage.myclass;public class test { public static void main(String[] args) { // TODO Auto-generated method stub Class appClass; try { appClass = Class.forName("mypackage.myclass"); System.out.println(appClass.getName()); try { if (appClass.newInstance() instanceof mypackage.myclass) { ((mypackage.myclass)appClass.newInstance()).print(); } } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}发一段代码吧,我现在的问题是如果有一万个类的话,那是不是得instanceof 判断 一万次有没有通用的办法 ??感谢 关键是你要用在哪,怎么用?如果说你要做的目的是,在一个统一平台上动态加载模块。那么应该让每个模块都实现一个接口比如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,在运行时获得并调用类的方法。 orangemike() 感谢提供的超好的方法,,很好的技术steedhorse(晨星) 如何写,能举一个例子吗,感谢 他们给出的也差不多就是了。更具体的到JavaDoc中查一下java.lang.reflect包里的类吧。《Thinking in Java》和《The Java Programming Language》中也都有单独的章节讲reflection。 高手来啊,为什么用java读取的证书DN信息乱码?C++,C#都没有问题,第一贴没人回复。。。。,有能力的来。。。。 什么是JAVA工作流引擎? 怎样在java中识别\t(即tab键) javax.xml.*;在哪里 获得模版本的Text值,在删除中好用,在更新中不好用 求助一个关于矩形数组的问题 怎样清空缓冲区? 初涉Java多线程,想请教各位一个有关synchronized代码块的问题! scjp试题,求解! 送分题-------------〉〉〉jar的问题 急求高手帮忙. 求助:如何存储gif图片文件
再Method[] getDeclaredMethods()
// TODO Auto-generated method stub
Class appClass;
try {
appClass = Class.forName("mypackage.myclass");
System.out.println(appClass.getName());
try {
if (appClass.newInstance() instanceof mypackage.myclass) {
((mypackage.myclass)appClass.newInstance()).print();
}
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
发一段代码吧,我现在的问题是如果有一万个类的话,那是不是得instanceof 判断 一万次有没有通用的办法 ??感谢
如果说你要做的目的是,在一个统一平台上动态加载模块。那么应该让每个模块都实现一个接口比如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执行方法。不过代码写成这样太丑陋了。
更具体的到JavaDoc中查一下java.lang.reflect包里的类吧。
《Thinking in Java》和《The Java Programming Language》中也都有单独的章节讲reflection。