java如何取某个类的属性值_java中如何取到一个对象的所有属性值,并且在创建一个相同的对象...

对象的类不知道,里面属性的类型也不知道。我感觉我没救了

问题补充:

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接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值