/*
* Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved.
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/ package java.lang; /**
* {@code RuntimeException} is the superclass of those
* exceptions that can be thrown during the normal operation of the
* Java Virtual Machine.
*
* <p>{@code RuntimeException} and its subclasses are <em>unchecked
* exceptions</em>. Unchecked exceptions do <em>not</em> need to be
* declared in a method or constructor's {@code throws} clause if they
* can be thrown by the execution of the method or constructor and
* propagate outside the method or constructor boundary.
*
* @author Frank Yellin
* @jls 11.2 Compile-Time Checking of Exceptions
* @since JDK1.0
*/
public class RuntimeException extends Exception {
static final long serialVersionUID = -7034897190745766939L; /** Constructs a new runtime exception with {@code null} as its
* detail message. The cause is not initialized, and may subsequently be
* initialized by a call to {@link #initCause}.
*/
public RuntimeException() {
super();
} /** Constructs a new runtime exception with the specified detail message.
* The cause is not initialized, and may subsequently be initialized by a
* call to {@link #initCause}.
*
* @param message the detail message. The detail message is saved for
* later retrieval by the {@link #getMessage()} method.
*/
public RuntimeException(String message) {
super(message);
} /**
* Constructs a new runtime exception with the specified detail message and
* cause. <p>Note that the detail message associated with
* {@code cause} is <i>not</i> automatically incorporated in
* this runtime exception's detail message.
*
* @param message the detail message (which is saved for later retrieval
* by the {@link #getMessage()} method).
* @param cause the cause (which is saved for later retrieval by the
* {@link #getCause()} method). (A <tt>null</tt> value is
* permitted, and indicates that the cause is nonexistent or
* unknown.)
* @since 1.4
*/
public RuntimeException(String message, Throwable cause) {
super(message, cause);
} /** Constructs a new runtime exception with the specified cause and a
* detail message of <tt>(cause==null ? null : cause.toString())</tt>
* (which typically contains the class and detail message of
* <tt>cause</tt>). This constructor is useful for runtime exceptions
* that are little more than wrappers for other throwables.
*
* @param cause the cause (which is saved for later retrieval by the
* {@link #getCause()} method). (A <tt>null</tt> value is
* permitted, and indicates that the cause is nonexistent or
* unknown.)
* @since 1.4
*/
public RuntimeException(Throwable cause) {
super(cause);
} /**
* Constructs a new runtime exception with the specified detail
* message, cause, suppression enabled or disabled, and writable
* stack trace enabled or disabled.
*
* @param message the detail message.
* @param cause the cause. (A {@code null} value is permitted,
* and indicates that the cause is nonexistent or unknown.)
* @param enableSuppression whether or not suppression is enabled
* or disabled
* @param writableStackTrace whether or not the stack trace should
* be writable
*
* @since 1.7
*/
protected RuntimeException(String message, Throwable cause,
boolean enableSuppression,
boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
  package com.todaytech.pwp.core.exception;

  public class SysException
extends RuntimeException
{
public SysException() {} public SysException(String message)
{
super(message);
} public SysException(String message, Throwable cause)
{
super(message, cause);
} public SysException(Throwable cause)
{
super(cause);
}
}
 package com.todaytech.pwp.core.util.beanutils;

 import com.todaytech.pwp.core.exception.SysException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.DynaClass;
import org.apache.commons.beanutils.DynaProperty;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.beanutils.converters.BigDecimalConverter; public final class ReflectUtil
{
private ReflectUtil() {} public static String getFieldByName(Object orig, String fieldName, boolean pbIgnoreCase)
{
Field[] origFields = getDeclaredFieldsForClass(orig.getClass());
String fieldNameToFind = fieldName;
if (pbIgnoreCase) {
fieldNameToFind = fieldName.toUpperCase();
}
Object objValue = null; for (int i = 0; i < origFields.length; i++) {
Field origField = origFields[i];
String name = origField.getName();
if (pbIgnoreCase) {
name = name.toUpperCase();
}
if (name.equals(fieldNameToFind)) {
origField.setAccessible(true);
try {
objValue = origField.get(orig);
} catch (IllegalAccessException e) {
throw new SysException(e);
}
origField.setAccessible(false);
break;
}
}
if (objValue != null) {
return ConvertUtils.convert(objValue);
}
return null;
} public static void setFieldByName(Object orig, String fieldName, String value, boolean pbIgnoreCase)
{
Field[] origFields = getDeclaredFieldsForClass(orig.getClass());
String fieldNameToFind = fieldName;
if (pbIgnoreCase) {
fieldNameToFind = fieldName.toUpperCase();
}
boolean found = false; for (int i = 0; i < origFields.length; i++) {
Field origField = origFields[i];
String name = origField.getName();
if (pbIgnoreCase) {
name = name.toUpperCase();
}
if (name.equals(fieldNameToFind)) {
origField.setAccessible(true);
try {
origField.set(orig, value);
} catch (IllegalAccessException e) {
throw new SysException(e);
}
origField.setAccessible(false);
found = true;
break;
}
}
if (!found) {
throw new IllegalArgumentException("Field not found. fieldName ='" + fieldName + "'");
}
} public static Object invokeMethod(Object owner, String methodName, Object... args)
{
Class ownerClass = owner.getClass();
Class[] argsClass = new Class[args.length];
int i = 0; for (int j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Method method = null;
try {
method = ownerClass.getMethod(methodName, argsClass);
return method.invoke(owner, args);
} catch (NoSuchMethodException e) {
throw new SysException(e);
} catch (InvocationTargetException e) {
throw new SysException(e);
} catch (IllegalAccessException e) {
throw new SysException(e);
}
} public static Object invokeStaticMethod(String className, String methodName, Object... args)
{
Class ownerClass = null;
try {
ownerClass = Class.forName(className);
Class[] argsClass = new Class[args.length];
int i = 0; for (int j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Method method = ownerClass.getMethod(methodName, argsClass);
return method.invoke(null, args);
} catch (ClassNotFoundException e) {
throw new SysException(e);
} catch (InvocationTargetException e) {
throw new SysException(e);
} catch (NoSuchMethodException e) {
throw new SysException(e);
} catch (IllegalAccessException e) {
throw new SysException(e);
}
} public static Object newInstance(String className, Object... args)
{
Class newoneClass = null;
try {
newoneClass = Class.forName(className);
Class[] argsClass = new Class[args.length];
int i = 0; for (int j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Constructor cons = newoneClass.getConstructor(argsClass);
return cons.newInstance(args);
} catch (ClassNotFoundException e) {
throw new SysException(e);
} catch (InvocationTargetException e) {
throw new SysException(e);
} catch (NoSuchMethodException e) {
throw new SysException(e);
} catch (InstantiationException e) {
throw new SysException(e);
} catch (IllegalAccessException e) {
throw new SysException(e);
}
} public static void copyNotNullProperties(Object objFrom, Object objTo)
{
copyAllPropertiesByName(objFrom, objTo, false);
} public static void copyAllProperties(Object objFrom, Object objTo)
{
ConvertUtils.register(new DateConverter(), java.util.Date.class);
ConvertUtils.register(new DateConverter(), java.sql.Date.class);
ConvertUtils.register(new BigDecimalConverter(null), BigDecimal.class);
copyAllPropertiesByName(objFrom, objTo, true);
} private static void copyAllPropertiesByName(Object objFrom, Object objTo, boolean bIncludeNull)
{
if (bIncludeNull) {
try {
BeanUtils.copyProperties(objTo, objFrom);
} catch (IllegalAccessException e) {
throw new SysException(e);
} catch (InvocationTargetException e) {
throw new SysException(e);
}
} else {
copyProperties(objTo, objFrom, bIncludeNull);
}
} private static void copyProperties(Object dest, Object orig, boolean bIncludeNull)
{
if (dest == null) {
throw new IllegalArgumentException("No destination bean specified");
}
if (orig == null) {
throw new IllegalArgumentException("No origin bean specified");
} if ((orig instanceof DynaBean)) {
copyDynaBean(dest, (DynaBean)orig, bIncludeNull);
} else if ((orig instanceof Map)) {
copyBeanMap(dest, (Map)orig, bIncludeNull);
} else {
copyBeanArray(dest, orig, bIncludeNull);
}
} private static void copyBeanArray(Object dest, Object orig, boolean bIncludeNull) {
PropertyDescriptor[] origDescriptors = PropertyUtils.getPropertyDescriptors(orig);
for (int i = 0; i < origDescriptors.length; i++) {
String name = origDescriptors[i].getName();
if (!"class".equals(name))
{ if ((PropertyUtils.isReadable(orig, name)) && (PropertyUtils.isWriteable(dest, name)))
try {
Object value = PropertyUtils.getSimpleProperty(orig, name);
if ((bIncludeNull) || (value != null)) {
BeanUtils.copyProperty(dest, name, value);
}
} catch (NoSuchMethodException ex) {
throw new SysException(ex);
} catch (InvocationTargetException e) {
throw new SysException(e);
} catch (IllegalAccessException e) {
throw new SysException(e);
}
}
}
} private static void copyBeanMap(Object dest, Map orig, boolean bIncludeNull) {
Iterator names = orig.keySet().iterator();
while (names.hasNext()) {
String name = (String)names.next();
if (PropertyUtils.isWriteable(dest, name)) {
Object value = orig.get(name);
if ((bIncludeNull) || (value != null)) {
try {
BeanUtils.copyProperty(dest, name, value);
} catch (IllegalAccessException e) {
throw new SysException(e);
} catch (InvocationTargetException e) {
throw new SysException(e);
}
}
}
}
} private static void copyDynaBean(Object dest, DynaBean orig, boolean bIncludeNull) {
DynaProperty[] origDescriptors = orig.getDynaClass().getDynaProperties();
for (int i = 0; i < origDescriptors.length; i++) {
String name = origDescriptors[i].getName();
if (PropertyUtils.isWriteable(dest, name)) {
Object value = orig.get(name);
if ((bIncludeNull) || (value != null)) {
try {
BeanUtils.copyProperty(dest, name, value);
} catch (IllegalAccessException e) {
throw new SysException(e);
} catch (InvocationTargetException e) {
throw new SysException(e);
}
}
}
}
} public static void setPropertyByName(Object objTo, String sFieldName, Object value, boolean bIgnoreCase)
{
if (bIgnoreCase) {
sFieldName = findPropertyName(objTo.getClass(), sFieldName);
}
try {
BeanUtils.copyProperty(objTo, sFieldName, value);
} catch (IllegalAccessException e) {
throw new SysException(e);
} catch (InvocationTargetException e) {
throw new SysException(e);
}
} private static String findPropertyName(Class objClz, String sFieldName)
{
Field[] fields = getDeclaredFields(objClz);
String sToRet = null;
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
String fieldName = field.getName();
if (fieldName.equalsIgnoreCase(sFieldName)) {
sToRet = fieldName;
break;
}
}
return sToRet;
} private static Field[] getDeclaredFields(Class objClz)
{
ArrayList fields = new ArrayList();
Class curClz = objClz;
Collections.addAll(fields, curClz.getDeclaredFields());
while (curClz.getSuperclass() != Object.class) {
curClz = curClz.getSuperclass();
Collections.addAll(fields, curClz.getDeclaredFields());
}
return (Field[])fields.toArray(new Field[fields.size()]);
} private static Field[] getDeclaredFieldsForClass(Class clz)
{
if (clz == Object.class) {
return new Field[0];
}
ArrayList<Field> fieldlist = new ArrayList();
fieldlist.addAll(Arrays.asList(clz.getDeclaredFields()));
Field[] fieldsOfSuperClz = getDeclaredFieldsForClass(clz.getSuperclass());
if (fieldsOfSuperClz != null) {
fieldlist.addAll(Arrays.asList(fieldsOfSuperClz));
}
return (Field[])fieldlist.toArray(new Field[0]);
} private static Map<String, Object> describeByFields(Object obj, boolean bGetSuperClassToo)
{
if (obj == null) {
throw new IllegalArgumentException("No obj specified");
}
Class classToView = obj.getClass();
return describeByFields(obj, classToView, bGetSuperClassToo);
} private static Map<String, Object> describeByFields(Object obj, Class pClassToView, boolean bGetSuperClassToo)
{
Map<String, Object> toReturn = new HashMap();
if (bGetSuperClassToo) {
Class superclz = pClassToView.getSuperclass();
if (superclz != Object.class) {
toReturn.putAll(describeByFields(obj, superclz, bGetSuperClassToo));
}
}
Field[] origFields = pClassToView.getDeclaredFields();
for (Field origField : origFields) {
String name = origField.getName();
origField.setAccessible(true);
try {
toReturn.put(name, origField.get(obj));
} catch (IllegalAccessException e) {
throw new SysException(e);
}
}
return toReturn;
} public static <T> Class<T> getGenericTypeArgument(Class clazz)
{
return getGenericTypeArgument(clazz, 0);
} public static Class getGenericTypeArgument(Class clazz, int index)
{
Type genType = clazz.getGenericSuperclass(); if (!(genType instanceof ParameterizedType))
{
return Object.class;
} Type[] params = ((ParameterizedType)genType).getActualTypeArguments(); if ((index >= params.length) || (index < 0))
{ return Object.class;
}
if (!(params[index] instanceof Class))
{
return Object.class;
} return (Class)params[index];
}
}

Java对象之间的深度复制拷贝的更多相关文章

  1. JSON 与JAVA对象之间的转换(转)

    JSON与XML两者目前在数据交互方面都有很高的使用率,随着现在SOA的兴起,异构系统的整合地位相应提高,本篇文章主要介绍JSON与JAVA对象之间的相互转换. 一.对普通类型的JSON模式的转换 一 ...

  2. 别名现象,java对象之间的相互赋值

    请看一下代码 import java.util.*; class book{ static  int c = null; } public static void main(String[] args ...

  3. json、xml和java对象之间的转化

    其实从面相对象的角度来理解这个问题,就会很清晰.java中的一切皆对象即把世间万物(Everything in the world)看做java对象,任何处理不了的问题都可以先转化成java对象在做处 ...

  4. JAVA里面json和java对象之间的相互转换

    1. 把java 对象列表转换为json对象数组,并转为字符串 JSONArray array = JSONArray.fromObject(list);    String jsonstr = ar ...

  5. XML字符串和JAVA对象之间的转化

     1.JAXB中相关的注解.类和接口说明 JAXB 中主要的一些注解 - shenyunsese 的专栏 - CSDN 博客 注:教程很全面很详细.但是仅供参考. 主要疑问区分和说明:  1.1 @X ...

  6. java 对象之间的复制

    package com.jy.demo.web; import java.util.Date; public class People { private String name;//姓名 priva ...

  7. [No0000B9]C# 类型基础 值类型和引用类型 及其 对象复制 浅度复制vs深度复制 深入研究2

    接上[No0000B5]C# 类型基础 值类型和引用类型 及其 对象判等 深入研究1 对象复制 有的时候,创建一个对象可能会非常耗时,比如对象需要从远程数据库中获取数据来填充,又或者创建对象需要读取硬 ...

  8. js对象/数组深度复制

    今天碰到个问题,js对象.数组深度复制:之前有见过类似的,不过没有实现函数复制,今晚想了一下,实现代码如下: function clone(obj) { var a; if(obj instanceo ...

  9. JAVA对象和XML文档、原来他们之间还有这一出

    最近项目开发中遇到一个问题,访问接口不再通过url地址请求的方式,而是 通过socket发送xml格式的报文到指定服务器来进行信息的统一认证.. 因此组装xml格式的报文字符串以及解析服务器返回的xm ...

随机推荐

  1. Python字符串方法总结(一)

    1.find 在一个较长的字符串中查找子串.它返回子串所在位置的最左端索引.如果没有找到则返回-1 2.split 将字符串用给定的分隔符分割成序列,当没有提供分隔符时,默认把所有空格作为分隔符 3. ...

  2. 第23月第24天 git命令 .git-credentials git rm --cached git stash clear

    在git push的时候,有时候我们会想办法撤销git commit的内容 1.找到之前提交的git commit的id git log 找到想要撤销的id 2.git reset –hard id ...

  3. Java基础03-12_对象比较

    对象比较 如果说现在有两个数字要判断是否相等,可以使用"=="完成 如果是字符串要判断是否相等使用"equals()" 但是如果说现在有一个自定义的类,要想判断 ...

  4. Java基础_0309:this关键字

    this简介 在Java中this可以完成三件事情:表示本类属性.表示本类方法.当前对象(只是先介绍概念) 调用本类属性 在一个类中定义的方法中可以直接访问类中的属性,但是很多时候有可能会出现方法参数 ...

  5. shiro 启动异常

    原因是:LoginController中用到,自动注入,要配置在 /permission1110/config/spring/applicationContext-service.xml中配置bean ...

  6. VGGNet学习——实践

    0 - DataSet http://www.csc.kth.se/~att/Site/Animals.html 1 - Code 1.1 - Import Packages import tenso ...

  7. windows10+ubuntu16.04双系统搭建

    0 - 环境 操作系统: Windows 10 + Ubuntu 16.04 显卡: GTX 950M Cuda 9.0 cudnn v7.0 tensorflow-gpu==1.7.0 1 - ub ...

  8. POJ 3253 Fence Repair (贪心)

    题意:将一块木板切成N块,长度分别为:a1,a2,……an,每次切割木板的开销为当前木板的长度.求出按照要求将木板切割完毕后的最小开销. 思路:比较奇特的贪心 每次切割都会将当前木板一分为二,可以按切 ...

  9. Maven入门项目创建

    项目构建 1.新建maven项目 2.跳过骨架选择,如果不跳过骨架选择创建出的项目目录是不全的(骨架其实就是项目的模板) 3.Group Id,Artifact Id,Version称为项目的坐标,当 ...

  10. javascript/ajax和php 进阶 之 项目实战

    1,使用异步思想做一个下拉列表,能够选择和展示数据库中对应的信息. 1,事件知识:所有的事件可参照:https://www.jb51.net/html5/459444.html 2,js中this补充 ...