只有一个Car@32c41a能得到原来的对象么?

plmko112233 2011-10-04 03:59:07
java只有一个Car@32c41a能得到原来的对象么?这是一个car 对象调用了tostring之后,能否得到原来的类,其实想得到原来类的各个域的信息,不知道怎么写
...全文
104 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
magong 2011-10-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 plmko112233 的回复:]

Class<?> class1=Class.forName(ClassNameParm).newInstance();
if ( obj instanceof class1.getClass()) {
class1=(class1.getClass())obj;
}
[/Quote]
这样写:

//传入两个参数过来,obj是对象,classNameParam是类名
Class clazz=Class.forName(classNameParam);
if ( clazz.isInstance(obj)) {
Field[] fields = clazz.getDeclaredFields();
for(Field f: fields){ //打印对象各个字段值
f.setAccessible(true);
System.out.println(f.getName() + ":" +f.get(obj));
}
}
sudan_727923 2011-10-05
  • 打赏
  • 举报
回复
学习了
  • 打赏
  • 举报
回复
这是不可能还原的!

因此,建议自定义的需要重写 toString() 方法
plmko112233 2011-10-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 magong 的回复:]

引用 6 楼 plmko112233 的回复:

是不是我还拥有这个Object的时候,如果没有tostring的话,还可以通过向下转型来得到具体对象?
如果这个对象的我也只知道名字,那可以得到么,如下:
Object o=args[i];
这里对象o是一个Car类,而当前是在另一个Test类下,那怎么向下转型,因为这个o对象是会变化的,在Test类下只能得到其方法名字,就是上面的“C……
[/Quote]
好吧,其实我说的有点问题,就是问题是,我要吧一个object的Car对象弄回来,强制转型的过程中,却只有edu.Car这个字符串,因为这个是参数,每次各不相同,想要获得object对象中的Car的信息,不知道怎么转型,或者怎么使用反射来达到目的,我知道的反射要得到field的值,也要传一个car对象的 ,转型做不了的话,还怎么得到所有的field信息呢,还是我哪里搞错了?
plmko112233 2011-10-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 magong 的回复:]

引用 8 楼 plmko112233 的回复:

Class<?> class1=Class.forName(ClassNameParm).newInstance();
if ( obj instanceof class1.getClass()) {
class1=(class1.getClass())obj;
}

这样写:
Java code

//传入两个参数过来,obj……
[/Quote]
呵呵,是我自己搞错了,其实OBJECT对象直接可以去得到所有的field,就像你说的那样,我根本没必要去转成特定的类再去获取它的field,谢谢你回复,谢谢大家~~
plmko112233 2011-10-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 magong 的回复:]

引用 6 楼 plmko112233 的回复:

是不是我还拥有这个Object的时候,如果没有tostring的话,还可以通过向下转型来得到具体对象?
如果这个对象的我也只知道名字,那可以得到么,如下:
Object o=args[i];
这里对象o是一个Car类,而当前是在另一个Test类下,那怎么向下转型,因为这个o对象是会变化的,在Test类下只能得到其方法名字,就是上面的“C……
[/Quote]
Class<?> class1=Class.forName(ClassNameParm).newInstance();
if ( obj instanceof class1.getClass()) {
class1=(class1.getClass())obj;
}
ClassNameParm是一个类的名字参数,是从别的方法得到的,所以只能反射得到,现在就是要得到这个类之后,把所有的field打印出来,上面代码写得好像挺别扭的,不知道怎么写了,请指教~
magong 2011-10-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 plmko112233 的回复:]

是不是我还拥有这个Object的时候,如果没有tostring的话,还可以通过向下转型来得到具体对象?
如果这个对象的我也只知道名字,那可以得到么,如下:
Object o=args[i];
这里对象o是一个Car类,而当前是在另一个Test类下,那怎么向下转型,因为这个o对象是会变化的,在Test类下只能得到其方法名字,就是上面的“Car”字符串,怎么向下转型
[/Quote]
对的,只要没有toString,原对象还在,就能转。

Car car;
if (o instanceof Car) car = (Car)o;
//System.out.println(car.getName());
plmko112233 2011-10-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 magong 的回复:]

嗯。
就像只知道人姓名不能克隆整个肉体一样,只知道toString之后的结果而不知道其他属性值当然无法还原对象。
[/Quote]
是不是我还拥有这个Object的时候,如果没有tostring的话,还可以通过向下转型来得到具体对象?
如果这个对象的我也只知道名字,那可以得到么,如下:
Object o=args[i];
这里对象o是一个Car类,而当前是在另一个Test类下,那怎么向下转型,因为这个o对象是会变化的,在Test类下只能得到其方法名字,就是上面的“Car”字符串,怎么向下转型?
plmko112233 2011-10-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qybao 的回复:]

可以得到原来的类,但是得不到原来的对象了
Car是代表类型,@是固定的,32c41a是对象的哈希值
要想通过这样的字符串还原是不可能的,已经丢失了各个属性的信息了
如果你只是想得到类的定义信息,那么可以通过反射
Java code
String s = "Car@32c41a";
s = s.relaceAll("(.*?)@.*", "$1");
Class<?> clazz = C……
[/Quote]
是不是我还拥有这个Object的时候,如果没有tostring的话,还可以通过向下转型来得到具体对象?
如果这个对象的我也只知道名字,那可以得到么,如下:
Object o=args[i];
这里对象o是一个Car类,而当前是在另一个Test类下,那怎么向下转型,因为这个o对象是会变化的,在Test类下只能得到其方法名字,就是上面的Car,怎么向下转型?
beowulf2005 2011-10-04
  • 打赏
  • 举报
回复
有办法,呵呵。

用jmap把内存dump出来。
再用jhat浏览查询dump 文件,把这个名为Car@32c41a的对象找出来。

然后就有你要的一切拉。。
magong 2011-10-04
  • 打赏
  • 举报
回复
不过楼主要是持有系统中所有对象的集合,那么只需要遍历一次,看看toString值是否匹配Car@32c41a,倒是可以找出到底是哪个对象的啦。
magong 2011-10-04
  • 打赏
  • 举报
回复
嗯。
就像只知道人姓名不能克隆整个肉体一样,只知道toString之后的结果而不知道其他属性值当然无法还原对象。
qybao 2011-10-04
  • 打赏
  • 举报
回复
可以得到原来的类,但是得不到原来的对象了
Car是代表类型,@是固定的,32c41a是对象的哈希值
要想通过这样的字符串还原是不可能的,已经丢失了各个属性的信息了
如果你只是想得到类的定义信息,那么可以通过反射
String s = "Car@32c41a";
s = s.relaceAll("(.*?)@.*", "$1");
Class<?> clazz = Class.forName(s);
Field[] fds = clazz.getDeclaredFields();
for (Field f : fds) {
System.out.println(f);
}
内容概要:本文详细介绍了一种基于Simulink仿真实现的单相交流电压控制器,该控制器采用两个背靠背连接的晶闸管结构,用于实现对交流电压的有效调节。通过构建完整的系统仿真模型,深入阐述了晶闸管的触发控制机制与移相触发原理,实现了对输出电压幅值的精确控制。文中系统分析了控制器在不同负载条件下的动态响应与稳态性能,验证了其在交流调压应用中的可行性与可靠性,涵盖了从理论建模、控制策略设计到仿真验证的全过程,具有较强的工程实践指导意义和教学参考价值。; 适合人群:电气工程、自动化、电力电子等相关专业的高校学生、科研人员及从事电力系统控制与仿真工作的工程师;具备电路理论基础和Simulink仿真操作经验的技术人员。; 使用场景及目标:①深入理解晶闸管在交流调压中的工作机理与相位控制方法;②掌握基于Simulink的电力电子系统建模与仿真技术;③应用于课程设计、科研项目或工业场合中对交流电压进行精确调控的技术开发与方案验证。; 阅读建议:建议结合Simulink模型同步运行与调试,重点关注触发角与输出电压之间的关系曲线,通过调整参数观察系统响应变化,强化对控制规律的理解与实际应用能力。
内容概要:本文系统研究了基于灰狼优化算法(GWO)及其多种改进版本(如MP-GWO、CS-GWO、灰狼-布谷鸟混合算法等)在复杂环境下无人机三维路径规划中的应用,并提供了完整的Matlab代码实现。内容涵盖算法原理分析、三维航迹建模、环境障碍物构建、适应度函数设计、多目标优化策略以及仿真结果可视化,重点对比不同群智能算法在路径最优性、收敛速度与避障能力方面的性能差异。同时拓展至强化学习(RL)、模型预测控制(MPC)、多无人机协同运输、城市密集场景Q-learning路径规划等多个前沿方向,展示了智能优化算法在无人机自主导航中的综合应用价值。; 适合人群:具备一定Matlab编程基础与优化算法理论知识,从事无人机路径规划、智能控制、群智优化或相关领域研究的研究生及科研人员(尤其适用于硕士、博士阶段学术研究与论文复现); 使用场景及目标:① 掌握GWO及其改进算法在三维空间中求解无人机路径规划的具体实现流程;② 对比分析多种群智能算法在多成本函数下的路径优化性能;③ 支持科研项目开发、高水平论文复现、算法创新与工程仿真验证; 阅读建议:建议按照文档目录结构系统学习,结合提供的网盘资源下载完整代码包,重点关注算法参数设置、仿真环境搭建与结果评价指标,并通过调试不同算法场景深化对路径规划机制的理解。

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧