java獲取所有屬性
① java中如何取到一個對象的所有屬性值,並且在創建一個相同的對象
利用Java的反射機制,或者是簡單點的,重寫被復制類的clone()方法,即可。看圖:
② java 怎麼獲取一個對象的屬性
1、過去某個類的某個屬性:
可以通過對象調用其屬性:
1)、創建對象 : 類名 對象名 = new 類名();
2)、調用屬性: 對象名.屬性
2、獲取某個對象的所有屬性
數組類型[] 數組名 = 對象名.getClass().getDeclaredFields();
③ java中如何取到一個對象的所有屬性值,並且在創建一個相同的對象
對象的類不知道,裡面屬性的類型也不知道。我感覺我沒救了
用反射機制吧,很輕松!比如說:只知道對象a,問你要a裡面所有屬性值 問題補充:udvs 寫道a.getClass().getDeclaredFields()哥們,我要的是值,不是屬性名,而且是私有的成員,公有的我能得到 問題補充:izhangh 寫道 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 寫道這個用反射有點浪費了。。不知道這樣能不能解決這個兄弟的問題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 寫道新手.....雖然昨天我也是.....
這段代碼你可以執行一下試試.
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 寫道對象的類不知道,裡面屬性的類型也不知道。
④ java批量獲取設置類欄位屬性
使用反射, 使用反射可以獲取它所有屬性的。你再仔細看看反射那塊的相關知識就行。
⑤ java中如何取到一個對象的所有屬性值,並且在創建一個相同的對象
對象的類不知道,裡面屬性的類型也不知道。我感覺我沒救了 用反射機制吧,很輕松!比如說:只知道對象a,問你要a裡面所有屬性值 問題補充:udvs 寫道a.getClass().getDeclaredFields()哥們,我要的是值,不是屬性名,而且是私有的成員,公有的我能得到 問題補充:izhangh 寫道 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 寫道這個用反射有點浪費了。。不知道這樣能不能解決這個兄弟的問題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 寫道新手.....雖然昨天我也是..... 這段代碼你可以執行一下試試. 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 寫道這個用反射有點浪費了。。
⑥ 寫一個Java方法,取得某個類里的所有屬性
給你寫了個例子你看下哈。。
import java.lang.reflect.Field;
public class GetField {
public static void main(String[] args) {
try {
Class clazz = Class.forName("");//根據類名獲得其對應的Class對象 寫上你想要的類名就是了 注意是全名 如果有包的話要加上 比如java.Lang.String
Field[] fields = clazz.getDeclaredFields();//根據Class對象獲得屬性 私有的也可以獲得
for(Field f : fields) {
System.out.println(f.getType().getName());//列印每個屬性的類型名字
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
⑦ java傳過來一個對象後如何得到這個對象的所有屬性值
1、過去某個類的某個屬性:
2,可以通過對象調用其屬性:
3,創建對象 :類名 對象名 = new 類名();
4,調用屬性:對象名.屬性
5,獲取某個對象的所有屬性
6,數組類型[] 數組名 = 對象名.getClass().getDeclaredFields();
7,使用反射
public static void main(String[] args) {
Model model = new Model();
Field fd = new Field();
fd.getField(model);
}
private void getField(Object model) {
java.lang.reflect.Field[] fields = model.getClass().getDeclaredFields();
for(java.lang.reflect.Field f:fields){
System.out.println(f.getName());
}
}