- 浏览: 186908 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
yangmo:
你好,求指教!QQ:3174968226
android利用mathjax在webview上显示数学公式 -
freezingsky:
越看越觉得,这真是吊丝的宿命。。。
今天我是个幸运儿 -
greemranqq:
~.~ 10W啊,看来LZ 还是坚持 呆下来了 加油
今天我是个幸运儿 -
flashing:
good luck!
今天我是个幸运儿 -
gy090028:
为什么我输入错误的密码都返回true呢。。。
登陆163邮箱 验证邮箱帐号密码是否正确
最近做一个东西,需要拷贝一个对象,而且父类属性也需要拷贝。.很多人可能会说直接引用待拷贝的对象就可以了。但是这个方法支持了使用子类引用指象父类引用。以下是代码:/**
/** 将sourceObj的属性拷贝到targetObj * @param sourceObj * @param targetObj * @param clazz 从哪一个类开始(比如sourceObj对象层级为:Object->User->ChineseUser->ChineseMan->ChineseChongQingMan) * 如果需要从ChineseUser开始复制,clazz就指定为ChineseUser.class */ public static void cpoyObjAttr(Object sourceObj,Object targetObj, Class<?> clazz)throws Exception{ if(sourceObj==null || targetObj==null){ throw new Exception("源对象和目标对象不能为null"); } Field[] fields=clazz.getDeclaredFields(); for(int i = 0; i < fields.length; i++){ fields[i].setAccessible(true); Object sourceValue=fields[i].get(sourceObj); fields[i].set(targetObj,sourceValue ); } if(clazz.getSuperclass()==Object.class){ return; } cpoyObjAttr(sourceObj,targetObj,clazz.getSuperclass()); }
以下是单元测试:
@Test public void cpoyObjAttrTtest(){ ChineseMan chineseMan=new ChineseMan(); chineseMan.setUserName("程序员"); chineseMan.setCat(new Cat("tom")); try { ChineseManExtend chineseManExtend=new ChineseManExtend(); ObjectTool.cpoyObjAttr(chineseMan, chineseManExtend, chineseMan.getClass()); System.out.println(chineseManExtend.getUserName()); System.out.println(chineseManExtend.getCat().getCatName()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
评论
6 楼
bernoulli
2013-01-11
小混蛋 写道
bernoulli 写道
小混蛋 写道
clazz.getDeclaredFields(); 这个方法不能取父类的属性的。API:
public Field[] getDeclaredFields()
throws SecurityException返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段,包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何字段,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。
public Field[] getDeclaredFields()
throws SecurityException返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段,包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何字段,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。
所以我用了递归
嗯,没看到递归。。。cpoyObjAttr(sourceObj,targetObj,clazz.getSuperclass()); clazz.getSuperclass()
@小混蛋
这就是递归。clazz.getSuperclass()每次传入的是父类
5 楼
小混蛋
2013-01-10
bernoulli 写道
小混蛋 写道
clazz.getDeclaredFields(); 这个方法不能取父类的属性的。API:
public Field[] getDeclaredFields()
throws SecurityException返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段,包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何字段,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。
public Field[] getDeclaredFields()
throws SecurityException返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段,包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何字段,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。
所以我用了递归
嗯,没看到递归。。。cpoyObjAttr(sourceObj,targetObj,clazz.getSuperclass()); clazz.getSuperclass()
4 楼
bernoulli
2013-01-09
小混蛋 写道
clazz.getDeclaredFields(); 这个方法不能取父类的属性的。API:
public Field[] getDeclaredFields()
throws SecurityException返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段,包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何字段,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。
public Field[] getDeclaredFields()
throws SecurityException返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段,包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何字段,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。
所以我用了递归
3 楼
小混蛋
2013-01-09
clazz.getDeclaredFields(); 这个方法不能取父类的属性的。API:
public Field[] getDeclaredFields()
throws SecurityException返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段,包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何字段,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。
public Field[] getDeclaredFields()
throws SecurityException返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段,包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何字段,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。
2 楼
bernoulli
2013-01-09
冲杯茶喝 写道
ChineseUser开始,Field[] fields=clazz.getDeclaredFields(); 这些变量也只是ChineseUser以上的啊,而不是以下啊。
就是以上额。需求就是以上。
1 楼
冲杯茶喝
2013-01-09
ChineseUser开始,Field[] fields=clazz.getDeclaredFields(); 这些变量也只是ChineseUser以上的啊,而不是以下啊。
发表评论
-
JAVA内存分配规则
2013-11-05 09:14 931*对象分配规则 1.对象 ... -
java的类加载需要注意的点--非大众版
2013-10-15 23:14 0本文不是通俗的讲JAVA类加载原理,这种文章网上一找一大把。大 ... -
实用简约的JAVA注释标签-高手必备
2013-10-15 22:37 7457大家在开发中写JAVA注释谁都会,不会一般写得少或者 ... -
java类加载先后顺序
2013-10-14 21:25 3673这里讲的不是类加载机制,是类的加载先后顺序。话不多说了,先 ... -
断点续传原理
2013-09-06 00:14 1668(一)断点续传的原理其 ... -
log4j,logback,slf4j三者的关系
2013-09-05 23:32 8703Log4j由三个重要的组件构成:日志信息的优先级,日志信息的 ... -
安全漏洞预警公告-Struts2存在远程命令执行漏洞 --终极解决方案
2013-07-18 10:16 2447struts2支持url?action:%{ognl exp ... -
将异常信息保存到String
2013-07-18 10:13 1170将异常信息保存到String中: private Stri ... -
无法定位程序输入点_JVM_SetNativeThreadName@12于动态链接库jvm.dll上
2013-06-29 15:40 3219系统提示升级jdk7,升级途中中断后来在运行JAVA就报:无法 ... -
struts2参数名支持任意字符
2013-06-18 18:09 2183struts2在传参数时会对参数名进行校瓮。默认的校验器只支 ... -
用Spring类读XML等文件
2013-06-16 22:04 0Java代码 String file ... -
登陆163邮箱 验证邮箱帐号密码是否正确
2013-06-16 22:02 3657有些时候我们只需要验证邮箱的帐号密码是否正确。而不需要发邮件 ... -
java去除字符串中的空格、回车、换行符、制表符 \r \n
2013-05-31 11:12 1515public static String replaceB ... -
第17章 线程和锁
2013-04-28 00:13 945工作之余翻译oracle官 ... -
随机数生成算法
2013-04-12 23:09 2939chrome 有很多场景我们需要产生随机数。一般是采用线性同 ... -
ThreadPoolExecutor对线程的管理
2013-03-26 13:37 788rfffff -
java class文件解析
2013-01-12 16:16 3379class文件就是java源文件编译的生成的文件。废话不多说, ... -
JMXtools的扩展
2013-01-11 10:20 2856大家都知道jmx的功能,一般都是使用三方包jmxtools.j ... -
JAVAC编译JAVA源文件
2013-01-10 09:34 1184大家都知道用javac命令可以编译java源文件,具体大家可以 ... -
Implicit super constructor SimpleJavaFileObject() is undefined for default const
2013-01-09 21:26 2193今天在引入rt.jar下包的一个类javax.tools.Si ...
相关推荐
4. **反序列化**:通过`java.io.ObjectInputStream`的`readObject()`方法将序列化的对象恢复为内存中的对象实例。 #### 构造方法 构造方法是用于初始化对象的关键组件。它有以下几个特点和用法: - **重载构造...
4. 序列化和反序列化:对象的持久化和恢复。 5. 工具类静态方法,如`Collections.emptyList()`。 **`switch`语句** 在Java 7之前,`switch`仅支持byte、short、char、int及其对应的封装类以及Enum。从Java 7开始,`...
- **多态**:多态是指父类引用可以指向子类对象,允许在不同对象上调用相同的方法,表现出不同的行为。多态有两种形式:显式多态(方法重写)和隐式多态(方法覆盖和接口实现)。 2. **创建对象**:Java中创建对象...
- **实现Serializable接口是Java对象序列化的前提条件。** - **允许对象被序列化和反序列化。 #### 四十六、显式指定serialVersionUID的原因 - **保证序列化兼容性:** 如果类的结构发生变化,serialVersionUID保持...
本文概述了Java语言的基础知识,包括面向对象的基本概念、类与对象的创建、包的使用、继承与多态、抽象类与接口、修饰符的作用、反射机制的应用、接口的实现、克隆与序列化的处理以及异常管理等内容。这些核心概念...
接口多态是通过实现多个接口来实现多态,继承多态是通过子类继承父类并重写方法,类型强制转换则是将对象转换为不同类型的引用。多态性依赖于Java虚拟机的动态派发机制,在运行时根据对象实际类型调用相应的方法。 ...
6. **Java序列化**:通过实现`Serializable`接口可以实现对象的序列化。 ##### 八、Java的集合 1. **`HashMap`排序题**:由于`HashMap`内部使用哈希表实现,其元素顺序是不确定的。若需排序,可以使用`TreeMap`或...
Java不支持像C++那样的复制构造函数,但可以通过克隆或序列化等方式实现类似的功能。 了解和掌握这些Java面试题中的知识点对于成为一名优秀的Java开发者至关重要,它们涵盖了OOP的核心原理以及Java语言的关键特性。...
5. **Java序列化**:序列化是将对象的状态转换为字节流的过程,以便存储或在网络中传输。要实现序列化,需要让类实现`Serializable`接口。反序列化则是将字节流恢复为对象的过程。 6. **静态方法和非静态方法**:...
- **Java实现浅克隆与深克隆**:浅克隆复制对象本身及含有引用的对象地址,而深克隆则复制了对象本身及所有成员变量的值。 - **枚举可以序列化吗**:枚举类型默认实现了`Serializable`接口,因此可以直接进行序列化...
- **详解:** 在Java中,克隆可以通过实现`Cloneable`接口并重写`clone()`方法来完成。`clone()`方法位于`Object`类中,它用于创建对象的一个精确副本。 **22. 静态初始化块** - **知识点:** 静态初始化块用于初始...
2. **JAVA-L9-ExtendingClass.ppt** - 继承(Extending Class)是面向对象编程的关键特性,允许一个类(子类)继承另一个类(父类)的属性和方法。这有助于代码复用,同时也可以实现类的层次结构,方便地创建具有...
Cloneable和Serializable接口分别用于对象克隆和序列化。 15. **HashMap**:HashMap基于哈希表实现,提供了高效的插入、删除和查找操作。`hashCode()`和`equals()`方法对于HashMap的正确运作至关重要,因为它们用于...
Collection接口不提供克隆和序列化方法,是因为克隆和序列化是对象的特定行为,每个集合实现可以决定其具体实现方式。 4.3 什么是迭代器(Iterator)? 迭代器提供了一种遍历集合的方法,用于访问集合中的元素。 ...
该文件为Java程序员面试宝典的一部分,主要内容包括Java基础知识点的面试问题及其答案,非常适合准备参加Java程序员面试的求职者。以下是详细的知识点: 1. Java源文件中可以包括多个类,但只能有一个公共类...
如果不实现这两个接口,Java 无法保证对象的状态可以正确复制或恢复,因此不能进行克隆或序列化操作。 #### 20. Iterator 接口的功能是什么? Iterator 接口提供了遍历集合元素的标准方法。它允许用户迭代地访问...
当子类重写父类的方法,并通过父类引用调用子类对象的方法时,实际执行的是子类的方法版本,这就是多态性的体现。 #### 24. 抽象类与接口的区别 抽象类可以包含抽象方法和具体方法,可以有构造器、字段等,主要...
实现序列化需使类实现`Serializable`接口,然后使用`ObjectOutputStream`和`ObjectInputStream`类进行序列化和反序列化。 #### 7. ".java"源文件中包含多个类的规则 一个`.java`文件可以包含多个类,但只能有一个...