如何用程序自动把一个 Object对象转回成原来的 对象;例如:
 User user=new User();
Object o=user;现在怎么用 程序动态的把它 变回以前的 user
EL表达式 底层都能转, 我想一定有方法 应该是 反射里的 但我没找到
求高手指点~~~~~~

解决方案 »

  1.   

    如果在既知类型的情况,强行转换就可以了

    User user=new User();
    Object o=user;
    User u = (User)o;否则,只能通过反射
      

  2.   

    楼主的意思是Person p = new Person("jack");
    Event e = new Event();Object o1 = p;
    Object o2 = e;Object oArr = {o1,o2};如何在不知道 o1是Person类的情况下 
    将 o1 转换为 p
      

  3.   

    恩就是 类似 EL表达式 一样 
    在不知道类型的情况下 把他转回原来的类型!
    我看断点 Object对象里 就存得有 曾经是什么类型
    但不知道怎么把它转回去
      

  4.   


    这样只能通过反射来访问o1
    Class c = o1.getClass();
    Field f = c.getDeclaredField(...)
    Method m = c.getDeclaredMethod(...); 
    或者你如果不嫌麻烦,可以用 instanceof 来判断,然后再自己转换

    if (o1 instanceof Person) {
        Person p = (Person)o1;
    }
      

  5.   


    我就是通过 反身 封装的一个 类似 hibernate 的查询 方法
    我知道 getMethods() getConstructors()Field f = c.getDeclaredField(...)
    Method m = c.getDeclaredMethod(...); 这2个方法多了个Declared 是什么意思哦?
    我对反身了解还很浅 请 说下 作用 谢谢
      

  6.   


    我就是通过 反身 封装的一个 类似 hibernate 的查询 方法
    我知道 getMethods() getConstructors()Field f = c.getDeclaredField(...)
    Method m = c.getDeclaredMethod(...); 这2个方法多了个Declared 是什么意思哦?
    我对反身了解还很浅 请 说下 作用 谢谢
      

  7.   

    jdk上面不是写的很清楚么?getDeclaredField(String name) 
              返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。getField(String name) 
              返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。一个是包括原来的 public ,private ,protect等等
    一个是只包括 public 
      

  8.   

    如果想动态地转回user
    那你准备把它存放在哪个变量中?
    那个变量你准备声明成什么类型?
    如果还是Object,那现在不用转回去,因为o就是Object
    如果你知道变量的类型,那又何必动态转,强转就行了
      

  9.   

    我把得到的Object转回原来的类型 动态的调用方法 或者 调用方法后再 以Object传出去 
      

  10.   

    奇怪的想法!
    如果一个类实现6个interface, 层层继承了5个抽象类。
    楼主所谓的原来的对象,又是指哪一个呢?
      

  11.   


    如果只是要调用,无需转回原来的类型,但既然要调用,你应该知道方法名称及参数类型了对吧,试下我下边这个程序:
    import java.lang.reflect.Method;public class testReflect {
    public void a() {
    System.out.println("a");
    } public static void main(String[] args) {
    try {
    testReflect tf = new testReflect();
    Object o = (Object) tf;
    Method m = o.getClass().getMethod("a", new Class[0]);
    Object result = m.invoke(o, new Object[0]);
    } catch (Exception e) {
    System.out.println(e);
    }
    }
    }
      

  12.   

    输出为a
    也就是说testReflect类中的方法a()已经被调用,无需把o"转回来"