如何用程序自动把一个 Object对象转回成原来的 对象;例如:
User user=new User();
Object o=user;现在怎么用 程序动态的把它 变回以前的 user
EL表达式 底层都能转, 我想一定有方法 应该是 反射里的 但我没找到
求高手指点~~~~~~
User user=new User();
Object o=user;现在怎么用 程序动态的把它 变回以前的 user
EL表达式 底层都能转, 我想一定有方法 应该是 反射里的 但我没找到
求高手指点~~~~~~
解决方案 »
- fck怎么集成到ssh?
- tomcat的安装问题
- tomcat下不同应用程序共享session用户信息雷同的问题
- 谁能给个SSH2 列表分页的简单例子
- JSP include 的子页面数据加载问题
- 分享:could not initialize a collection的问题已经解决,特来和大家分享~!
- jbuilderx与tomcat配置的问题
- hibernate.properties中怎么配置连接Sybase数据库啊?……
- 会话bean的状态和非状态,是否可以理解为.....
- while语句中的表达式?
- Struts2 s:set 设入对象
- 使用Fat jar作成包,Eclipse不能导入
如
User user=new User();
Object o=user;
User u = (User)o;否则,只能通过反射
Event e = new Event();Object o1 = p;
Object o2 = e;Object oArr = {o1,o2};如何在不知道 o1是Person类的情况下
将 o1 转换为 p
在不知道类型的情况下 把他转回原来的类型!
我看断点 Object对象里 就存得有 曾经是什么类型
但不知道怎么把它转回去
这样只能通过反射来访问o1
Class c = o1.getClass();
Field f = c.getDeclaredField(...)
Method m = c.getDeclaredMethod(...);
或者你如果不嫌麻烦,可以用 instanceof 来判断,然后再自己转换
即
if (o1 instanceof Person) {
Person p = (Person)o1;
}
我就是通过 反身 封装的一个 类似 hibernate 的查询 方法
我知道 getMethods() getConstructors()Field f = c.getDeclaredField(...)
Method m = c.getDeclaredMethod(...); 这2个方法多了个Declared 是什么意思哦?
我对反身了解还很浅 请 说下 作用 谢谢
我就是通过 反身 封装的一个 类似 hibernate 的查询 方法
我知道 getMethods() getConstructors()Field f = c.getDeclaredField(...)
Method m = c.getDeclaredMethod(...); 这2个方法多了个Declared 是什么意思哦?
我对反身了解还很浅 请 说下 作用 谢谢
返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。getField(String name)
返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。一个是包括原来的 public ,private ,protect等等
一个是只包括 public
那你准备把它存放在哪个变量中?
那个变量你准备声明成什么类型?
如果还是Object,那现在不用转回去,因为o就是Object
如果你知道变量的类型,那又何必动态转,强转就行了
如果一个类实现6个interface, 层层继承了5个抽象类。
楼主所谓的原来的对象,又是指哪一个呢?
如果只是要调用,无需转回原来的类型,但既然要调用,你应该知道方法名称及参数类型了对吧,试下我下边这个程序:
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);
}
}
}
也就是说testReflect类中的方法a()已经被调用,无需把o"转回来"