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

谁能解释下这段代码
String   pm=“cc.ww.fruitRegPm”;
{
                Class   pmclass   =   Class.forName(pm);
                Constructor   cons   =   pmclass.getConstructor(new   Class[0]);
                Object   data   =   cons.newInstance(new   Object[0]);
                Method   select   =   pmclass.getDeclaredMethod( "select ",
                                                                                                    new   Class[]   {DBManage.class,
                                                                                                    Integer.class,   });
                Class   returnclass   =   select.getReturnType();
                Constructor   retcons   =   returnclass.getConstructor(new   Class[0]);
                Object   retdata   =   retcons.newInstance(new   Object[0]);
                retdata   =   select.invoke(data,   new   Object[]   {dbmanage,   fruitId});
                if   (retdata.toString().equals( "1 "))   {   //存在记录
                    operAtt   =   "edit ";
                }
                else   if   (retdata.toString().equals( "0 "))   {   //不存在记录
                    operAtt   =   "add ";
                }
            }
这段代码什么意思能给解释下各类的使用吗?

------解决方案--------------------
java反射机制,动态构造类的方法,参数和返回值,调用方法,并根据返回值进行操作

关于java反射机制可以参考:
http://www.blogjava.net/Swing/archive/2007/07/05/128263.html
------解决方案--------------------
楼上说得正确 Java 的反射机制,用于动态加载类、调用方法等。

// 根据 pm 加载一个类
Class pmclass = Class.forName(pm);
// 获得这个类的一个空参数的构造方法
Constructor cons = pmclass.getConstructor(new Class[0]);
// 根据上面的构造方法生成一个对象
Object data = cons.newInstance(new Object[0]);
// 从 pmclass 的类中寻找到方法名为 select,有两个参数,类型分别是:
// DBManage 和 Integer 类型
Method select = pmclass.getDeclaredMethod( "select ",
new Class[] {DBManage.class, Integer.class, });
// 获得这个方法的返回类型的类
Class returnclass = select.getReturnType();
Constructor retcons = returnclass.getConstructor(new Class[0]);
Object retdata = retcons.newInstance(new Object[0]);
// 使用 dbmanage, fruitId 两个参数调用 select 方法,并将结果赋给 retdata
retdata = select.invoke(data, new Object[] {dbmanage, fruitId});