在某个业务环境中:(如)Aclass a = xxxxx;现在假如Aclass这个类在项目中存在,但再某个业务中动态获取到了类的名字(包含类路径:“com.van.Demo”),如何获得该类了?比如下面的方法:public void tt(String className){   [通过className获得的类] obj = xxxxx;
   .........
}实际业务很复杂,只是举个简单的例子。我就想让obj前面红色部分这个类型通过字符串动态生成类型,而不是写死再这里。知道用Class.forName("className")....,后面具体方法不记得了,希望高手帮忙。

解决方案 »

  1.   

    你可以写成  object  然后在转化
      

  2.   

    这种时候,你就需要用反射的方式来访问

    public void tt(String className){  //[通过className获得的类] obj = xxxxx;
      Class<?> c = Class.forName(className);
      Object obj = c.newInstance();
      Method m = c.getDeclaredMethod(method_name, method_parameter_type);
      m.setAccessible(true);
      Object returnObj = m.invoke(obj, method_paramter_value);
      .........
    }
      

  3.   

    你想要使用这个类型,,,将obj转换不就可以了吗?
      

  4.   

    那你就只能强行转换了。
    if (obj instanceof xxx) {
       xxx x = (xxx)obj
    }
      

  5.   

    通过反射创建对象,然后getClass和Class<T>结合使用?饿,这只是我的本办法,仅供参考
      

  6.   

    写了几个Sample,你一看就明白了
          String className="xxx.xxx.Aclass";     //获得相应类
        Class c = Class.forName(className);
        
        //生成一个该类的无参实例o1
        Object o1 = c.newInstance(); //等价于 o = new Aclass();     //生成一个该类的有参实例o2(假设构造方法的参数类型为String,int)
        Class[] cl = {Class.forName("java.lang.String"), Class.forName("java.lang.Integer")};
        Constructor m = c.getConstructor(cl);
        Object[] params = {"abc", 1}; 
        Object o2 = m.newInstance(params); // 等价于 o = new Aclass("abc",1)
      

  7.   

    Class.forName("类名").newInstance();