package com.ygsoft.czp.ticketsys.util;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import com.ygsoft.czp.model.AcUser;
import com.ygsoft.czp.model.WebCzpCzrw;
import com.ygsoft.czp.test.common.ClassPropertyBean;
/**
* 进行一些JAVABEAN的相关操作 〖功能模块〗: BeanUtil(功能) 〖目 的〗: 〖作 者〗: * 〖创建日期〗: 〖版 本〗: 1.00<br>
* 〖版权信息〗: * 〖更改记录〗: 更改时间、更改人、更改原因、更改内容<br>
*/
public class BeanUtil {
/**
* 将源对象中的数据拷贝到目标对象中
*
* @param target
* @param source
*/
public static void copyProperty(Object target, Object source) {
Field[] tarFields = target.getClass().getDeclaredFields();
Field[] sourFields = source.getClass().getDeclaredFields();
for (int i = 0; i < tarFields.length; i++) {
Field f = tarFields[i];
int n = f.getModifiers();
// 判断是FINAL字段
if (Modifier.isFinal(n)) {
continue;
}
f.setAccessible(true);
String tarType = tarFields[i].getType().toString();
String name = tarFields[i].getName();
for (int j = 0; j < sourFields.length; j++) {
Field temp = sourFields[j];
int m = temp.getModifiers();
if (Modifier.isFinal(m)) {
continue;
}
temp.setAccessible(true);
String sourType = sourFields[j].getType().toString();
String sourName = sourFields[j].getName();
if (name.equalsIgnoreCase(sourName)) {
try {
if (tarType.equals(sourType)) {
f.set(target, temp.get(source));
} else if ((tarType.indexOf("Date") != -1 || (tarType
.indexOf("Timestamp") != -1) )
&& sourType.indexOf("String") != -1) {
String time = (String) temp.get(source);
if (time != null && !(time.trim().equals(""))) {
String dateStr = "yyyy-MM-dd HH:mm:ss";
if (time.trim().length() < 11) {
dateStr = "yyyy-MM-dd";
}
SimpleDateFormat myFmt2 = new SimpleDateFormat( dateStr);
Date date = new Date();
try {
date = myFmt2.parse(time);
} catch (ParseException e) {
System.out
.println("copyProperty 时不能进行字符串到日期的转换");
e.printStackTrace();
}
f.set(target, date);
}
} else if (tarType.indexOf("String") != -1
&& (sourType.indexOf("Date") != -1 || (sourType
.indexOf("Timestamp") != -1)||(sourType
.indexOf("CnDate") != -1))) {
Date time = (Date) temp.get(source);
if (time != null) {
SimpleDateFormat myFmt2 = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
f.set(target, myFmt2.format(time));
}
}else if(tarType.indexOf("String") != -1 && sourType.indexOf("Long") != -1){
if(temp.get(source)!=null){
f.set(target, ""+temp.get(source) );
}else{
f.set(target, "");
}
}else if(tarType.indexOf("Long") != -1 && sourType.indexOf("String") != -1){
if(temp.get(source)!=null && !temp.get(source).equals("")){
f.set(target, new Long(temp.get(source).toString()) );
}
}else if(tarType.indexOf("Double") != -1 && sourType.indexOf("String") != -1){
if(temp.get(source)!=null && !temp.get(source).equals("")){
f.set(target, new Double(temp.get(source).toString()) );
}
}else if(tarType.indexOf("String") != -1 && sourType.indexOf("Double") != -1){
if(temp.get(source)!=null){
f.set(target, ""+temp.get(source) );
}else{
f.set(target, "");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
temp.setAccessible(false);
}
f.setAccessible(false);
}
}
/**
* 将源对象中的数据拷贝到目标对象中
*
* @param target
* @param source
* @param namesList 如果传入某个属性,则某个属性不进行COPY
*
*/
public static void copyProperty(Object target, Object source,List namesList) {
Field[] tarFields = target.getClass().getDeclaredFields();
Field[] sourFields = source.getClass().getDeclaredFields();
for (int i = 0; i < tarFields.length; i++) {
Field f = tarFields[i];
int n = f.getModifiers();
// 判断是FINAL字段
if (Modifier.isFinal(n)) {
continue;
}
f.setAccessible(true);
String tarType = tarFields[i].getType().toString();
String name = tarFields[i].getName();
if(namesList.contains(name)){
continue;
}
for (int j = 0; j < sourFields.length; j++) {
Field temp = sourFields[j];
int m = temp.getModifiers();
if (Modifier.isFinal(m)) {
continue;
}
temp.setAccessible(true);
String sourType = sourFields[j].getType().toString();
String sourName = sourFields[j].getName();
if (name.equalsIgnoreCase(sourName)) {
try {
if (tarType.equals(sourType)) {
f.set(target, temp.get(source));
} else if ((tarType.indexOf("Date") != -1 || (tarType
.indexOf("Timestamp") != -1))
&& sourType.indexOf("String") != -1) {
String time = (String) temp.get(source);
if (time != null && !(time.trim().equals(""))) {
String dateStr = "yyyy-MM-dd HH:mm:ss";
if (time.trim().length() < 11) {
dateStr = "yyyy-MM-dd";
}
SimpleDateFormat myFmt2 = new SimpleDateFormat(
dateStr);
Date date = new Date();
try {
date = myFmt2.parse(time);
} catch (ParseException e) {
System.out
.println("copyProperty 时不能进行字符串到日期的转换");
e.printStackTrace();
}
f.set(target, date);
}
} else if (tarType.indexOf("String") != -1
&& (sourType.indexOf("Date") != -1 || (sourType
.indexOf("Timestamp") != -1))) {
Date time = (Date) temp.get(source);
if (time != null) {
SimpleDateFormat myFmt2 = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
f.set(target, myFmt2.format(time));
}
}else if(tarType.indexOf("String") != -1 && sourType.indexOf("Long") != -1){
f.set(target, new Long(temp.get(source).toString()) );
}else if(tarType.indexOf("Long") != -1 && sourType.indexOf("String") != -1){
f.set(target, ""+temp.get(source) );
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
temp.setAccessible(false);
}
f.setAccessible(false);
}
}
//
private static ConcurrentHashMap<Class, Field[]> classPropertyMap = new ConcurrentHashMap<Class, Field[]>();
/**
* 由类得到类的所有属性,并进行缓存,使得再次使用时可以取到相关信息。
* @param cla
* @return
*/
public static Field[] getClassProperty(Class cla) {
Field[] fileds= classPropertyMap.get(cla);
if (fileds != null) {
return fileds;
}else {
fileds = cla.getDeclaredFields();
classPropertyMap.put(cla, fileds);
return fileds;
}
}
/**
* 将对象转换为一个XML字符串,返回
*
* @param target
* @param source
*/
public static String convertBeanToXML(Object source,String beanName) {
StringBuffer sb = new StringBuffer();
Field[] sourFields = getClassProperty(source.getClass());
beanName = beanName.equals("")?source.getClass().getName().substring(source.getClass().getName().lastIndexOf(".")+1):beanName;
sb.append("<"+beanName+">");
for (int j = 0; j < sourFields.length; j++) {
Field temp = sourFields[j];
int m = temp.getModifiers();
if (Modifier.isFinal(m)) {
continue;
}
temp.setAccessible(true);
String sourName = sourFields[j].getName();
sb.append("\r\n\t<"+sourName+">");
try {
if(temp.get(source) != null){
sb.append(temp.get(source) );
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
sb.append("</"+sourName+">");
temp.setAccessible(false);
}
sb.append("\r\n</"+beanName+">");
return sb.toString();
}
/**
* 将对象转换为一个XML字符串,返回
*
* @param target
* @param source
*/
public static String convertBeanToXML(Object source,String beanName,Map map) {
StringBuffer sb = new StringBuffer();
Field[] sourFields = getClassProperty(source.getClass());
beanName = beanName.equals("")?source.getClass().getName():beanName;
sb.append("<"+beanName+">");
for (int j = 0; j < sourFields.length; j++) {
Field temp = sourFields[j];
int m = temp.getModifiers();
if (Modifier.isFinal(m)) {
continue;
}
temp.setAccessible(true);
String sourName = sourFields[j].getName();
if(map.containsKey(sourName)){
sb.append("\r\n\t<"+sourName+">");
try {
if(temp.get(source) != null){
sb.append(temp.get(source) );
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
sb.append("</"+sourName+">");
}
temp.setAccessible(false);
}
sb.append("\r\n</"+beanName+">");
return sb.toString();
}
}
分享到:
相关推荐
这个压缩包“IOS应用源码——Property.rar”很可能包含了一个或多个iOS应用程序的源代码,这些代码中广泛使用了Property特性来管理对象的属性。下面将详细介绍Property的相关知识点。 1. **Property声明**: 在...
在iOS开发过程中,`@property` 和 `@synthesize` 是两个非常重要的概念。它们不仅简化了代码编写过程,提高了开发效率,还增强了程序的可维护性。本文将深入探讨这两个特性,并通过示例对比它们使用前后的情况。 ##...
2 Copy the source code to the new projects. 3 Import the liberaries as show on top. 4 New the database and be sured the server is open. 4 OK! You can run the ...
例如,假设我们有一个属性名为`firstName`,但是getter方法被错误地写成了`getFirst_Name`,这时BeanUtils将无法正确识别这个属性,导致数据无法正确复制。 此外,BeanUtils在处理集合类型时也有需要注意的地方。...
@property (nonatomic, copy) NSString *text; //... @end ``` 同时,还需要实现初始化方法,如 `- (instancetype)initWithFrame:(CGRect)frame` 和 `- (instancetype)initWithCoder:(NSCoder *)aDecoder`。 2...
在iOS开发中,Objective-C语言提供了@property关键字来声明属性,并且可以在属性声明时指定不同的内存管理行为,主要涉及到assign、retain和copy这三个关键字。为了深入理解这三者的区别,首先需要了解Objective-C的...
property.Value.CopyTo(dateBytes, 0); string date = System.Text.Encoding.ASCII.GetString(dateBytes).TrimEnd('\0'); Console.WriteLine($"图片的拍摄日期:{date}"); ``` 如果要修改图片属性,首先需要创建一...
(三)阿拉伯金额数字万位或元位是“0”,或者数字中间连续有几个“0”, 万位、元位也是“0’,但千位、角位不是“0”时,中文大写金额中 可以只写一个零字,也可以不写“零”字。如¥1,680.32,应写成 人民币壹...
属性可以包含不同的特性,比如readwrite(读写)、readonly(只读)、nonatomic(非原子的)、atomic(原子的)、strong(强引用)、weak(弱引用)、assign(直接赋值)、copy(复制)等。 在iOS开发中,正确使用@...
在Objective-C中,`@property` 是一种声明属性的关键字,它允许你在类接口中定义对象的特性,如可读性、可写性、内存管理策略等。在C++中,我们通过访问限定符(public, protected, private)来控制成员变量的访问...
- `copy`: 用于创建对象的副本,对于不可变对象是浅复制,对于可变对象是深复制。有助于保持对象状态的一致性。 - `weak`: 弱引用,不会增加对象的引用计数,当对象被释放,弱引用自动设为`nil`,常用于解决循环...
一个BeanUtils.copyProperties的小型快速替代。 起因 由于BeanUtils(Spring或Apache Commons)的copyProperties实现是利用反射实现的,它在大量调用时具有比较严重的性能问题。 BeanMapper通过javassist类库实现在...
- 使用`@property(copy)`与`NSMutableArray`结合时会出现问题,因为`NSMutableArray`是可变的,而copy操作会创建一个深拷贝,这意味着原本期望的是一个可变的数组,但实际得到的是一个不可变的数组副本。这可能导致...
我们在声明@property 属性时,总是要在括号中写上assign、retain、copy、weak、strong中的一个,很多时候,我们仅仅只是按照习惯去写经常写的那一个,但有时候看代码时又会发现别人用的不尽相同,那这些之间的区别是...
innobackupex --defaults-file=/etc/my.cnf --user=root --password=xxxx --copy-back /data/backup/2016-06-27_23-59-56/ ``` 4. **修改数据目录权限**:更改数据目录的所有权。 ```bash chown -R mysql:mysql ...
当创建一个NSMutableArray属性时,如示例中的`@property (nonatomic, strong) NSMutableArray* arr;`,内存布局通常分为三部分: 1. 第一块内存是存储NSMutableArray指针的变量`arr`,占用8个字节。 2. 第二块内存...
示例:客户端尝试对一个已写锁定的资源进行修改,但在请求中提供了正确的锁令牌,因此操作成功执行。 ##### 6.7 写锁与COPY/MOVE 当使用`COPY`或`MOVE`方法时,如果目标资源已经被写锁定,则操作将失败,除非提供...
3. 请问 property 的 作用,assign,copy,retain 的 区别; assign就是基本赋值 copy是重新创建一个oc对象,计数器是1 retain是对计数器+1 4.请写出实现多线程操作涉及的类及 简单 示例; NSThread, ...
ID3v1标签通常位于MP3文件的末尾,包含128字节的数据,分为以下几个部分: 1. 标签标识符("TAG",3字节) 2. 歌曲标题(30字节) 3. 艺术家名(30字节) 4. 专辑名(30字节) 5. 年份(4字节) 6. 评论(30字节)...