「java获取对象所有属性」java获取对象属性值的方法
今天给各位分享java获取对象所有属性的知识,其中也会对java获取对象属性值的方法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java中如何取到一个对象的所有属性值,并且在创建一个相同的对象
- 2、写一个Java方法,取得某个类里的所有属性
- 3、java 迭代器中怎样取对象的属性
- 4、java 用户输入指定数据输出该对象的所有属性?
- 5、怎么用java8 lamada 提取集合中每个对象的属性
- 6、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 迭代器中怎样取对象的属性
迭代器模式。。。。Iterator
对已集合类中的任何一个实现类,都可以返回这样一个Iterator对象。就和循环一样,好处是可以适用于任何一个类,而且实际上java对他进行了优化,比直接用index访问快一点(这一点没法考证,别人都这样说)。。
不过呢,有一点很好,就是用起来确实很好用~~加上泛型就更好用啦~~
比如说这样一个例子
ArrayList String arr = new ArrayList String ();
Iterator it = arr.iterator;//好像是iterator()吧。。不记得了,你看看doc就知道了。
迭代的时候可以这样
while( it .hasNext() ){
//做一些处理啦,比如
System.out.print( it。next );
}
配合上泛型,一个好处是it.next()可以不用类型转换啦~
以前用的时候是Object,还要自己转,,,,我感觉、、、Iterator和泛型简直就是绝配哈~~单独用貌似都没什么直接好处
java 用户输入指定数据输出该对象的所有属性?
String name;//定义一个字符串
name=uesr.next();//输入字符串
if(name.compareTo("罗斯")==0){//String类型的对象的内置比较器;如果返回值为0,name=="罗斯"
.....
}
else if(name.compareTo("小兵")==0){
...
}
怎么用java8 lamada 提取集合中每个对象的属性
要提取属性的话,用Stream中的map,然后使用方法引用,就可以了。
举个例子Student类中有name属性:
ListStudent students = new ArrayListStudent();
ListString names =students.stream().map(Student::getName).collect(Collectors.toList());
也可以重新写你那个对象的toString()方法:
譬如你那个对象类为Studentclass student{private int id;private String password;private String username;public String toString(){return id +"," +password + "," + username;}}这样你就可以直接调用for (int i = 0; i list.size(); i++) {System.out.println(list.get(i).toString());};
java中如何取到一个对象的所有属性值,并且在创建一个相同的对象
利用Java的反射机制,或者是简单点的,重写被复制类的clone()方法,即可。看图:
关于java获取对象所有属性和java获取对象属性值的方法的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。