现在我在前台已经通过User这个字符串 拿到 com.dto.User 这个地址 然后反射成obj
那我后台判断时候 怎么实例化出来?? 怎么动态的实例化这个obj 就如后台使用这个obj (User)obj 强转后使用。。 问题是 我现在知道的User字符串 总不能使用("User")obj 这样强转吧 (肯定不行的- - )求各位达达给思路或解决方案!!
那我后台判断时候 怎么实例化出来?? 怎么动态的实例化这个obj 就如后台使用这个obj (User)obj 强转后使用。。 问题是 我现在知道的User字符串 总不能使用("User")obj 这样强转吧 (肯定不行的- - )求各位达达给思路或解决方案!!
如果后台程序有import User,那么就直接转换User u = (User)obj
如果没有,那就继续用反射的方式访问obj的方法或属性
就像2L这样的
User user = (User)Class.forName("com.dto.User").newInstance() ;
我现在知道的条件 只有 "com.dto.User" 怎么在非手动的情况下 做到上面的步骤??
Class c = Class.forName(s);
Object obj = c.newInstance();
Method m = c.getDeclaredMethod("XX", [yy]);
m.setAccessible(true);
m.invoke(obj);
package com.reflect.xb;public class ScreenPrint { public void print(String str){
System.out.println("JAVA EE"+str);
}}
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;public class ScreenPrintTest { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub try {
Class c = Thread.currentThread().getContextClassLoader().loadClass("com.reflect.xb.ScreenPrint");
if(c==null){
c = Class.forName("com.reflect.xb.ScreenPrint");
}
Object obj = c.newInstance();
Method mPrint = c.getMethod("print",String.class);
mPrint.invoke(obj, " hello ");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}以前照搬的代码,看看有帮助没