java反射机制实例
1.通过数据库字段反射给对象实例赋值
convertClass.java
/**
* 通过反射构造对象
* @param obj
* @param rs
* @return
*/
public Object convertClass(Object obj,ResultSet rs) {
try {
//得到元数据
ResultSetMetaData metaData = rs.getMetaData();
//遍历元数据
for(int i=0;i<metaData.getColumnCount();i++) {
String columName = metaData.getColumnName(i);
//转换驼峰规则
String attributeName = StatUtils.lineToHump(columName);
String attributeValue = rs.getObject(columName) != null ? rs.getObject(columName).toString() : "";
//特殊字段对格式进行处理
if(!"".equals(attributeValue)&&"BATCHTIME".equals(columName)) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
attributeValue = format.format(attributeValue);
}
StatUtils.setFieldValueByFieldName(obj, attributeName, attributeValue);
}
} catch (SQLException e) {
e.printStackTrace();
}
return obj;
}
StatUtils.java
public class StatUtils {
private static Pattern linePattern = Pattern.compile("_(\\w)");
public static String chgListStrToInStr(String searchName, List<String> searchIds) {
if (!StringUtil.isBlank(searchName) && !CollectionUtil.isEmpty(searchIds)) {
StringBuffer retStr = new StringBuffer();
for(int i = 0; i < searchIds.size(); ++i) {
if (i % 1000 == 0) {
if (i == 0) {
retStr.append(searchName).append(" in (");
} else {
retStr.append(") or ").append(searchName).append(" in (");
}
} else {
retStr.append(" , ");
}
retStr.append("'").append((String)searchIds.get(i)).append("'");
}
retStr.append(")");
return retStr.toString();
} else {
return "";
}
}
/**
* 下划线转驼峰
* @param str
* @return
*/
public static String lineToHump(String str){
str = str.toLowerCase();
Matcher matcher = linePattern.matcher(str);
StringBuffer sb = new StringBuffer();
while(matcher.find()){
matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
}
matcher.appendTail(sb);
return sb.toString();
}
/**
* 获取四舍五入
* @param value
* @return
*/
public static String roundHalfUp(double value, int scaleNum) {
String formatStr = addZeroForNum("0.", (scaleNum+2));
DecimalFormat df = new DecimalFormat(formatStr);
double result = new BigDecimal(String.valueOf(value)).setScale(scaleNum, BigDecimal.ROUND_HALF_UP).doubleValue();
return df.format(result);
}
public static String addZeroForNum(String str, int strLength) {
int strLen = str.length();
StringBuffer sb = null;
while (strLen < strLength) {
sb = new StringBuffer();
sb.append(str).append("0");//右补0
str = sb.toString();
strLen = str.length();
}
return str;
}
public static Object setFieldValueByFieldName(Object o, String fieldName, Object fieldValue) {
try {
Field f = o.getClass().getDeclaredField(fieldName);
f.setAccessible(true);
try {
f.set(o, fieldValue);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
return o;
}
/**
* 根据属性名获取属性值
*
* @param fieldName
* @param object
* @return
*/
public static Object getFieldValueByFieldName(String fieldName, Object object) {
try {
Field field = object.getClass().getDeclaredField(fieldName);
//设置对象的访问权限,保证对private的属性的访问
field.setAccessible(true);
return field.get(object);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static Map<String, Object> objectToMap(Object obj) throws Exception {
if(obj == null){
return null;
}
Map<String, Object> map = new HashMap<String, Object>();
Field[] declaredFields = obj.getClass().getDeclaredFields();
for (Field field : declaredFields) {
field.setAccessible(true);
map.put(field.getName(), field.get(obj));
}
return map;
}
public static void main(String[] args) {
System.out.println(roundHalfUp(0.2000606, 6));
}
}
2.通过对象属性反射给对象赋值
public static Object initObjects(Object obj,ResultSet rs) {
Field[] fields = obj.getClass().getDeclaredFields();
for (int i = 0; i <fields.length ; i++) {
// 取消属性的访问权限控制,即使private属性也可以进行访问。
fields[i].setAccessible(true);
String fieldName = fields[i].getName();
//转大写
String biColumNameString = fieldName.toUpperCase();
String columValue;
try {
columValue = rs.getObject(biColumNameString) != null ? rs.getObject(biColumNameString).toString() : "";
fields[i].set(obj, columValue);
} catch (IllegalAccessException e) {
e.printStackTrace();
}catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
return obj;
}
java反射机制实例的更多相关文章
- Java反射机制实例解析
1.获取想操作的访问类的java.lang.Class类的对象 2.调用Class对象的方法返回访问类的方法和属性信息 3.使用反射API来操作 每个类被加载后,系统会为该类 ...
- [转]Java反射机制详解
目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实例化Class类对象 ·获取一个对象的父类与实现的接口 ·获取某个类中的全部构造函数 - 详 ...
- 【转载】Java反射机制详解
转自:http://baike.xsoftlab.net/view/209.html#3_8 1反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对 ...
- Java 基础之详解 Java 反射机制
一.什么是 Java 的反射机制? 反射(Reflection)是Java的高级特性之一,是框架实现的基础,定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: ...
- Java反射机制可以动态修改实例中final修饰的成员变量吗?
问题:Java反射机制可以动态修改实例中final修饰的成员变量吗? 回答是分两种情况的. 1. 当final修饰的成员变量在定义的时候就初始化了值,那么java反射机制就已经不能动态修改它的值了. ...
- java反射机制简单实例
目录 Java反射 简单实例 @(目录) Java反射 Java语言允许通过程序化的方式间接对Class进行操作.Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通 ...
- Java知识总结:Java反射机制(用实例理解)
概念理解: 反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机制来 实现对自己行为的描述( self-representation )和检测( examination) ,并能 ...
- 第28章 java反射机制
java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...
- Java反射机制
Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射: 静态编译:在编译时确定类型,绑定对象,即通过 ...
随机推荐
- MySQL报错解决方案:2013-Lost connection to MySQL server
今天上课的时候,在搭建完MySQL测试环境中出现的问题,整理如下: 问题描述:搭建完MySQL,用远程连接工具(Navicat)连接时报错: 2013-Lost connection to MySQL ...
- python正则表达式获取代理IP网站上的IP地址
import urllib.request import re def open_url(url): req = urllib.request.Request(url) req.add_header( ...
- 基本类型变量、引用类型变量的在java中的存放位置
一.局部变量存储在方法栈中 在方法中声明的变量,即该变量是局部变量,每当程序调用方法时,系统都会为该方法建立一个方法栈,其所在方法中声明的变量就放在方法栈中,当方法结束系统会释放方法栈,其对应在该方法 ...
- VMware虚拟机环境配置--网络配置
Hadoop集群搭建第一篇. 环境: VMware workstation 12, centos 6.5 配置虚拟机网络连接模式为NAT模式(共享主机的ip地址). 桥接模式: 和主机windows是 ...
- java中equals,hashcode和==的区别
https://www.cnblogs.com/kexianting/p/8508207.html
- 虚拟化之kvm --(vnc控制台)
作者:邓聪聪 随着日益不同的需求增多,为了满足主机供求,get到这一招虚拟化技术,以增加点见识! 1.使用yum安装: yum -y install qemu-kvm libvirt python-v ...
- boost::bind 介绍
boost::bind 介绍 这篇文章介绍boost::bind()的用法, 文章的主要内容是参考boost的文档. 1. 目的 boost::bind 是std::bindlist 和 std: ...
- 关于boost中enable_shared_from_this类的原理分析
首先要说明的一个问题是:如何安全地将this指针返回给调用者.一般来说,我们不能直接将this指针返回.想象这样的情况,该函数将this指针返回到外部某个变量保存,然后这个对象自身已经析构了,但外部变 ...
- 使用lld自动发现监控多实例redis
zabbix 可以通过常见的手段监控到各种服务,通过编写脚本来获取返回值并将获取到的值通过图形来展现出来,包括(系统.服务.业务)层面.可是有些时候在一些不固定的场合监控一些不固定的服务就比较麻烦.例 ...
- SpringBoot和SpringCloud面试题
一. 什么是springboot 1.用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件) 2.创建独立的spring引用程序 main方法运行 ...