对象的类不知道,里面属性的类型也不知道。我感觉我没救了
问题补充:
udvs 写道
都有对象了,为什么不知道对象的类呢? 
用反射机制吧,很轻松!
比如说:只知道对象a,问你要a里面所有属性值
问题补充:
udvs 写道
a.getClass().getDeclaredFields()
哥们,我要的是值,不是属性名,而且是私有的成员,公有的我能得到
问题补充:
izhangh 写道
Java代码  
public static Object deepClone(Object obj) {  
try {  
ByteArrayOutputStream bo = new ByteArrayOutputStream();  
ObjectOutputStream oo = new ObjectOutputStream(bo);  
oo.writeObject(obj);  
// 从流里读回来  
ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());  
ObjectInputStream oi = new ObjectInputStream(bi);  
return (oi.readObject());  
}  
catch(Exception e) {  
}  
return obj;  
}  
不得不承认你是玩流高手这都想得到,但是回的还是原来的对象啊,对象里面的私有属性值还是得不到啊
问题补充:
zhanghaiyangruijie 写道
这个用反射有点浪费了。。不知道这样能不能解决这个兄弟的问题
Java代码  
package com.zhy.test.prototype;  
public class TestClone {     
/** 原型模式  
* @param args   
*/    
public static void main(String[] args) {     
try {     
new TestClone().cloneObject();     
} catch (CloneNotSupportedException e) {     
e.printStackTrace();     
}     
}     
public void cloneObject() throws CloneNotSupportedException {     
Person p = new Person();     
Man man = new Man();     
man.setSalory("111123");     
p.setName("zhangfei");     
p.setMan(man);     
//man.setSalory("122335");//(1)     
Person pp = p.getClonePerson(p);     
man.setSalory("122335");//(2)     
pp.setName("aa");     
System.out.println("pp.getName()= " + pp.getName() + " pp.man.getSalory()= "+pp.getMan().getSalory());     
System.out.println("p.getName()=" + p.getName()+" p.man.getSalory()= "+p.getMan().getSalory());     
}     
}     
class Person implements Cloneable {     
private String name = "";     
private Man man;     
public String getName() {     
return name;     
}     
public void setName(String name) {     
this.name = name;     
}     
public Person getClonePerson(Person p) throws CloneNotSupportedException {     
Person pp = (Person) p.clone();     
return pp;     
}     
public Man getMan() {     
return man;     
}     
public void setMan(Man man) {     
this.man = man;     
}     
public Object clone() throws CloneNotSupportedException{     
Person p = (Person) super.clone();     
p.man = this.getMan().getCloneMan(this.getMan());     
return p;     
}     
}     
class Man implements Cloneable{     
private String salory = "";     
public String getSalory() {     
return salory;     
}     
public void setSalory(String salory) {     
this.salory = salory;     
}      
public Man getCloneMan(Man man) throws CloneNotSupportedException{     
Man ma = (Man)man.clone();     
return ma;     
}     
}    
见解独到,但是有违提议,可以鼓励鼓励
问题补充:
ouchxp 写道
新手.....虽然昨天我也是.....
这段代码你可以执行一下试试. 
Java代码  
import java.lang.reflect.Field;  
import java.lang.reflect.Modifier;  
import sun.misc.Unsafe;  
public class TestClass {  
private String name;  
public String getName() {  
return name;  
}  
public void setName(String name) {  
this.name = name;  
}  
public static void main(String[] args) throws Exception {  
TestClass tc = new TestClass();  
tc.setName("oUCHxP");  
//现在是一个未知类型的对象(模拟一下)  
Object obj = tc;  
//获取对象类型,可以看到输出是TestClass类型  
Class c = obj.getClass();  
System.out.println(c);  
//创建此类型的空对象  
Field fu = Unsafe.class.getDeclaredField("theUnsafe");  
fu.setAccessible(true);  
Unsafe us = (Unsafe) fu.get(null);  
Object newObj = us.allocateInstance(c);  
//可以看到name是空的  
System.out.println("newObj.name: " + ((TestClass) newObj).getName());  
//获取所有成员(包括private)的值,并拷贝到新对象中  
Field[] fields = c.getDeclaredFields();  
for (Field f : fields) {  
//不拷贝static成员和final成员  
if (Modifier.isStatic(f.getModifiers()) || Modifier.isFinal(f.getModifiers())) {  
continue;  
}  
f.setAccessible(true);  
Object fieldValue = f.get(obj);  
f.set(newObj, fieldValue);  
}  
//再看一下新对象里的内容,private成员也被复制过来了  
System.out.println("newObj.name: " + ((TestClass) newObj).getName());  
}  
}  
果然是老鸟,让你猜着了,但是呢,我也是本着不用反射来解题的。所以请各位再想想办法来解决这难题。
问题补充:
ouchxp 写道
zhanghaiyangruijie 写道
这个用反射有点浪费了。。不知道这样能不能解决这个兄弟的问题..
lz 写道
对象的类不知道,里面属性的类型也不知道。
未必实现了Cloneable接口

转载于:https://www.cnblogs.com/huapox/archive/2013/05/01/3516095.html

java中如何取到一个对象的所有属性值,并且在创建一个相同的对象相关推荐

  1. java中的取模_Java 中的取模和取余

    期末复习密码学时需要用到取模运算,发现 Java 中的 % 运算符并不是取模运算(Modulo Operation),而是取余运算(Complementation). 计算方法 对于整数 a,b 来说 ...

  2. opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类

    opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类 参考文章: (1)opengl中的Floatbuffer和 ...

  3. java创建一个不可变对象_如何在Java中创建不可变类?

    java创建一个不可变对象 Today we will learn about the immutable class in Java. What are immutable classes? The ...

  4. Java中使用递归计算1~N阶乘的值

    Java中使用递归计算1~N阶乘的值 public class test {// 求阶乘的方法public static int factorial (int m) {if (m == 1) {// ...

  5. java创建一个不可变对象_使用不可变对象创建值对象

    java创建一个不可变对象 在回答我最近的文章中AutoValue:生成的不可变的值类 , 布兰登认为,这可能是有趣的,看看如何AutoValue比较项目Lombok和Immutables和凯文借调这 ...

  6. R语言使用多个数据类型不同的向量数据创建一个dataframe数据对象、使用列名称(column name)访问dataframe中的指定数据列的数据

    R语言使用多个数据类型不同的向量数据创建一个dataframe数据对象.使用列名称(column name)访问dataframe中的指定数据列的数据 目录 R语言使用多个数据类型不同的向量数据创建一 ...

  7. java中的取模和取余_取模运算

    本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 取模运算是求两个数相除的余数.[1] 取模运算("Modulus Operation")和取余运算(&qu ...

  8. Java中的取整方法

    在Java中,Math类有四个取整方法 方法 描述 ceil(x) x向上取整为它最接近的整数,以双精度值返回 floor(x) x向下取整为它最接近的整数,以双精度值返回 rint(x) x取整为它 ...

  9. java中integer取值范围,Java中的Integer取值范围(-2^32 ~ 2^31 - 1)分析

    在Java中Integer的最小值(MIN_VALUE).最大值(MAX_VALUE)定义如下: /** * A constant holding the minimum value an {@cod ...

最新文章

  1. Windows Server入门系列29 Hash加密与SAM数据库
  2. 除了数据,生活中还有这些......
  3. MultiByteToWideChar和WideCharToMultiByte
  4. 光流 | 基于对偶方法的变分光流改进算法
  5. 6174问题 --ACM解决方法
  6. FPGA学习笔记---用Quartus II生成输入输出框图
  7. WordPress学习笔记(一)文章操作
  8. 十种日常食物比砒霜还毒!
  9. MATLAB数字水印系统
  10. Kali-linux-2020 sqli-labs环境配置(含网上最全Less-29在Kali上的配置)
  11. T410i开机显示fan error修复
  12. dubbo源码分析第七篇一服务暴露第三小节一远程暴露内核剖析
  13. 康蒂尼药业再次冲刺港股:9个月营收4.4亿 龙磐创投是股东
  14. python期货量化交易实战_Python期货量化交易实战
  15. AQS(AbstractQueuedSynchronizer)同步器
  16. 仿京东放大镜效果案例
  17. xsd文件 -- 伤痛
  18. 博达:经营管理再升级,从选对CRM开始
  19. 2010-11-30 Proview end date!
  20. 贵州将大力推进城市更新“四改”工作

热门文章

  1. java几个easy出错的小程序
  2. SQL数据库无法附加 823错误修复 连接中断
  3. Linux系统安装gcc/g++详细过程
  4. 【effective c++读书笔记】【第7章】模板和泛型编程(3)
  5. C/C++动态二维数组的内存分配和释放
  6. 使用JDK自带jvisualvm监控tomcat
  7. 支付宝支付 第十集:支付回调
  8. piczoom兼容性问题_浏览器不兼容原因及解决办法
  9. 安卓如何调出软键盘_如何系统学习手机摄影?这张思维导图告诉你
  10. nginx 负载均衡配置_LINUX系统nginx负载均衡配置