定义一个String,然后可以得到名称是这个String的类,方法或属性等有些类似Map<String,Class>就是效率低些

解决方案 »

  1.   

    只是形象比喻而已要代码找baidu/google
      

  2.   

    反射的例子网上很多啊,google一下一大把。
      

  3.   

    import java.lang.reflect.*;
    public class  a{
    public static void main(String[] args) {
    try{
    Constructor[] cs=Class.forName("b").getDeclaredConstructors();
    //运行时获得包括类的所有构造函数的数组,即反射
    int i=0;
    System.out.println("类b的共有"+cs.length+"个够造函数");
    while(i<cs.length){
    System.out.println("类b的第"+(i+1)+"个够造函数:"+cs[i]);
    i++;
    }
    }catch(ClassNotFoundException cn){ }
    }
    }
    class b{
    public b(){
    //
    }
    public b(int x){
    //
    }
    public b(int x,float y){
    //
    }
    }
      

  4.   

    以楼上的帖子做个解释:(就算是借花献佛了)class b 好比一个人;Class.forName("b").getDeclaredConstructors(); 
    "b"就好像是他在镜子中的影子;
    try{ 
    Constructor[] cs=Class.forName("b").getDeclaredConstructors(); 
    //运行时获得包括类的所有构造函数的数组,即反射 
    int i=0; 
    System.out.println("类b的共有"+cs.length+"个够造函数"); 
    while(i <cs.length){ 
    System.out.println("类b的第"+(i+1)+"个够造函数:"+cs[i]); 
    i++; 

    }catch(ClassNotFoundException cn){ } 
    上面这段代码,就是利用b在镜子中"反射"出来的影子得到他的相关属性,如构造函数;
      

  5.   

    public static String parseRequestXml(String filepath) {
    SAXReader saxReader = new SAXReader();
    String username = null;
    String objectName; // 对象名 BblxDAOHibernate DAO前的数据 也就是Bblx
    String methodName; // 应该调的方法名
    Map<String, String> poMap = null; // 调方法该传的参数 Map<String, String> userMap = null;
    try {
    // 得到对document对象
    Document document = saxReader.read(new File(filepath)); Element root = document.getRootElement(); // 得到类名
    Element objecte = root.element("CallInfo").element("Params")
    .element("Object");
    objectName = objecte.getText(); // 得到方法名
    Element method = root.element("CallInfo").element("Params")
    .element("Method");
    methodName = method.getText(); // 得到params元素 用于循环得到参数
    Element params = root.element("CallInfo").element("Params")
    .element("Po").element("paramstack").element("params");
    int tempi = 0; // 用于计数
    Class[] argsClass = null; // 调方法的参数class
    Object[] argsObject = null; // 调方法的参数
    for (Iterator i = params.elementIterator(); i.hasNext();) {
    Element tempe = (Element) i.next();
    poMap.put(tempe.getName(), tempe.attributeValue("value"));
    Object ob = tempe.attributeValue("value");
    argsClass[tempi] = ob.getClass();
    argsObject[tempi] = ob;
    tempi++;
    } // 得到user节点 用于循环出用户数据
    Element user = root.element("CallInfo").element("Params").element(
    "User");
    for (Iterator i = user.elementIterator(); i.hasNext();) {
    Element tempe = (Element) i.next();
    userMap.put(tempe.getName(), tempe.attributeValue("value"));
    } // ***********动态创建类,动态掉方法*************// Class obClass = null;
    Object object = null;// 这个类的对象
    Method[] meths = null;// 存储该类的所有方法
    Object returnObject = null; // 用于返回值
    String returnType = null; // 返回类型
    String returnCode = "0"; // 调用情况 0:失败 1:成功
    String realObject = packageName + objectName + DAOHibernateExt; // 要请求的类的全名
    String daoObject = objectName + DAOExt; // 对象的dao 如BblxDAO // 包.类
    try {
    obClass = Class.forName(realObject);// 得到T的Class
    object = obClass.newInstance();// 得到对象
    } catch (Exception e) {
    e.printStackTrace();
    } try {
    String realReturnS = null;
    List realReturnL = null;
    obClass = Class.forName(daoObject); // 得到T的Class
    WebApplicationContext wac = WebApplicationContextUtils
    .getRequiredWebApplicationContext(lsc); // 通过这个对象才能得到别的dao对象
    object = wac.getBean(daoObject);// 得到对象
    // 直接调用方法 不必要通过循环
    returnObject = object.getClass().getMethod(methodName,
    (Class[]) argsClass).invoke(obClass, argsObject);
    returnType = object.getClass().getMethod(methodName,
    (Class[]) argsClass).getReturnType().toString();
    if (returnType.indexOf("String") != -1) {
    realReturnS = returnObject.toString();
    } else if (returnType.indexOf("List") != -1) {
    realReturnL = (List) returnObject;
    }
    for (int i = 0; i < realReturnL.size(); i++) {
    Object ob = realReturnL.get(i);// 取出返回数据的一条
    // obClass = Class.forName(realObject);// 得到T的Class
    // object = obClass.newInstance();// 得到对象
    Class oc = ob.getClass();
    oc.getDeclaredMethods();
    oc.newInstance();
    }
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } // ******************************************动态创建类,动态掉方法end } catch (DocumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return username; }
      

  6.   

    上面那个例子是解析  * <xml_root> <callinfo caller="caozuozhe"> <params> <object>ObjectName</object>
     * <method>MethodName</method> <po>ArrName</po> <user>Data</user>
     * </params> </callinfo> </xml_root>这个文件! 在动态创建类 调类中的方法!