bean中的属性过多时,要计算一个bean的list之和是一件非常麻烦的事情,可以用java的反射机制解决这件事情,代码如下:

package com.jzzhcs.utils;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List; /**
* 系统通用工具类
*
* @author Jeffy
*
*/
public class Util { /**
* 遍历bean的属性
*
* @author Jeffy
* @param e
* bean对象
* @throws Exception
*/
public static void reflect(Object e) throws Exception {
Class<? extends Object> cls = e.getClass();
Field[] fields = cls.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Field f = fields[i];
f.setAccessible(true);
System.out.println("属性名:" + f.getName() + " 属性值:" + f.get(e));
}
} /**
* 计算bean的和
* 利用java反射原理获取传入的object的属性值以及getset方法
* @author Jeffy
* @param e
* bean对象
* @throws Exception
*/
public static Object getSumOfBean(List<?> list) throws Exception {
Class<? extends Object> cls = list.get(0).getClass();
Object resultBean = cls.newInstance();
for (Object o : list) {
Field[] fields = cls.getDeclaredFields();
for (int i = 0; i < fields.length; i++) { Field f = fields[i];
//因为写成private 所以这里必须设置
f.setAccessible(true);
//定义属性名和属性值
String fieldName = f.getName();
Object fieldValue = f.get(o);
//定义构造get、set方法所使用的变量名
String name = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
//定义get、set方法
Method getMethod = resultBean.getClass().getMethod("get" + name);
//调用get方法
Object value = getMethod.invoke(resultBean); // 获取属性的类型
String type = f.getGenericType().toString();
// 如果type是类类型,则前面包含"class ",后面跟类名
if (type.equals("class java.lang.String")) {
}
if (type.equals("class java.lang.Double")) {
if (fieldValue != null) {
// System.out.println("属性名为:" + name);
// System.out.println("属性值为:" + value);
Method setMethod = resultBean.getClass().getMethod("set" + name,Double.class);
if((Double)value != null){
setMethod.invoke(resultBean, (Double)value + (Double)fieldValue);
} else {
setMethod.invoke(resultBean, (Double)fieldValue);
}
// System.out.println(getMethod.invoke(resultBean));
} else {
System.out.println("属性值为:空");
}
}
}
}
return resultBean;
} public static void main(String[] args) throws Exception {
Entity e = new Entity();
List<Entity> list = new ArrayList<Entity>();
e.setD1(1.0);
e.setD2(3.0);
e.setD3(7.0);
list.add(e);
e = new Entity();
e.setD1(13.0);
e.setD2(17.0);
e.setD3(23.0);
list.add(e);
Object o = getSumOfBean(list);
return ;
} }

getSumOfBean方法是主要逻辑,遍历list中的所有bean,将bean的Double类型的属性求和,通过反射调用结果bean的set方法,将属性值存入结果bean。

下面是bean的定义:

package com.jzzhcs.utils;

public class Entity {
private String s1 = "字符串1"; private Double d1; private Double d2; private Double d3; public String getS1() {
return s1;
} public void setS1(String s1) {
this.s1 = s1;
} public Double getD1() {
return d1;
} public void setD1(Double d1) {
this.d1 = d1;
} public Double getD2() {
return d2;
} public void setD2(Double d2) {
this.d2 = d2;
} public Double getD3() {
return d3;
} public void setD3(Double d3) {
this.d3 = d3;
} }

计算bean的和(java)的更多相关文章

  1. Spring mvc 报错:No qualifying bean of type [java.lang.String] found for dependency:

    具体错误: No qualifying bean of type [java.lang.String] found for dependency: expected at least 1 bean w ...

  2. 7 -- Spring的基本用法 -- 8... 抽象Bean与子Bean;Bean继承与Java继承的区别;容器中的工厂Bean;获得Bean本身的id;强制初始化Bean

    7.8 深入理解容器中的Bean 7.8.1 抽象Bean与子Bean 把多个<bean.../>配置中相同的信息提取出来,集中成配置模版------这个配置模版并不是真正的Bean,因此 ...

  3. 使用mybatis报错constructor found in com.atguigu.mybatis.bean.Department matching [java.lang.Integer, java.lang.String]

    报错constructor found in com.atguigu.mybatis.bean.Department matching [java.lang.Integer, java.lang.St ...

  4. 构建一个学生Student,根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。

    定义一个表示学生信息的类Student,要求如下: (1)类Student的成员变量: sNO 表示学号: sName表示姓名: sSex表示性别: sAge表示年龄: sJava:表示Java课程成 ...

  5. 计算一维组合数的java实现

    背景很简单,就是从给定的m个不同的元素中选出n个,输出所有的组合情况! 例如:从1到m的自然数中,选择n(n<=m)个数,有多少种选择的组合,将其输出! 本方案的代码实现逻辑是比较成熟的方案: ...

  6. 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法

    Java提供了Class类,可以通过编程方式获取类别的字段和方法,包括构造方法    获取Class类实例的方法:   类名.class   实例名.getClass()   Class.forNam ...

  7. 基于OpenStreetMap计算驾车距离(Java)

    最近公司有个项目需要计算6000个点之间的驾车距离,第一时间想到的是利用Google的Distance Matrix API,但是免费Key每天只能计算2500个元素(元素 = 起点数量 * 终点数量 ...

  8. Spring装配bean(在java中进行显式配置)

    1.简单介绍 Spring提供了三种装配机制: 1.在XML中进行显式配置: 2.在java中进行显式配置: 3.隐式的bean发现机制和自动装配. 其中,1和3项在项目中经常使用,而在java中进行 ...

  9. 算法笔记_044:表达式计算求值(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的 ...

随机推荐

  1. java基础之 序列化

    一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化.       把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬 ...

  2. app启动时间命令

    app启动: 冷启动和热启动 冷启动方式: adb shell am start -W -n package/activity 停止app命令: adb shell am force-stop pac ...

  3. Python异常总结(出处: 鱼C论坛)

    Python 标准异常总结http://bbs.fishc.com/thread-45814-1-1.html(出处: 鱼C论坛) Python标准异常总结AssertionError    断言语句 ...

  4. windows下python Tkinner环境布置(包含PIL环境安装)

    布置步骤:1.安装python 2.7.11 安装步骤:由于网上存在有相关经验,所以在此引用一下 http://jingyan.baidu.com/article/0bc808fc42dfab1bd4 ...

  5. [WinForm] VS2010发布、打包安装程序

    最近用到了VS2010WinForm的程序打包功能,网上发现一篇好帖,在此记录以供日后他人之需. 原文链接地址:http://www.mamicode.com/info-detail-2453.htm ...

  6. Objective-C Memory Management

    Objective-C Memory Management Using Reference Counting 每一个从NSObject派生的对象都继承了对应的内存管理的行为.这些类的内部存在一个称为r ...

  7. UIImage学习

    UIImage A UIImage object is a high-level way to display image data. You can create images from files ...

  8. BootStrap 的modal 中使用typeahead

    刚开始怎么也不现实,在页面上显示正常. 调试发现是下拉框被modal遮挡住了, 找到样式dropdown-menu    修改z-index值为2000后,显示正常.(modal的z-index值为1 ...

  9. 重载运算符:类成员函数or友元函数

    类成员函数: bool operator ==(const point &a)const { return x==a.x; } 友元函数: friend bool operator ==(co ...

  10. 1st贝塞尔函数的使用

    x=-100:0.1:100; y1=besselj(7,x);y2=besselj(10,x);y3=besselj(20,x);y4=besselj(40,x);y5=besselj(60,x); ...