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. 008-Scala主构造器、私有构造器、构造器重载实战详解

    008-Scala主构造器.私有构造器.构造器重载实战详解 Scala主构造器实战 无参数的主构造器 分析 1.name 需要赋初值,一般通过占位符来代表空值 2.private 声明私有的age 生 ...

  2. spring入门教程——笔记

    Spring学习笔记(1)----简单的实例 ---------------------------------   首先需要准备Spring包,可从官方网站上下载.   下载解压后,必须的两个包是s ...

  3. Visual Studio 2015 Update 1 ISO

    Visual Studio Community 2015 with UPDATE 1___________________________________________English ENU - h ...

  4. C#类的继承,方法的重载和覆写

    在网易云课堂上看到唐大仕老师讲解的关于类的继承.方法的重载和覆写的一段代码,注释比较详细,在此记下以加深理解. 小总结: 1.类的继承:允许的实例化方式:Student t=new Student() ...

  5. FastFDS配置安装

    先说环境: win7旗舰版,配CRT连接虚拟机,虚拟机用的vmware Player,安装的CentOS6.4版本. 1.添加用户 useradd fastdfs 这步可以不做,后面的操作用root账 ...

  6. Spring中Bean的生命周期方法

    Bean的生命周期方法 src\dayday\Car.java package dayday;import com.sun.org.apache.xpath.internal.SourceTree;i ...

  7. yii开发一个web程序的基本流程

    1. 创建目录结构.在前面的章节Creating First Yii Application写的yiic工具可以帮助我们快速完成这步. 2. 配置 application.就是修改applicatio ...

  8. CLR线程池

    WaitCallback 表示要在 ThreadPool 线程上执行的回调方法. 创建委托,方法是将回调方法传递给 WaitCallback 构造函数. 您的方法必须具有此处所显示的签名. 如果想使用 ...

  9. 黑马程序员——【Java高新技术】——案例:银行业务调度系统

    ---------- android培训.java培训.期待与您交流! ---------- 一.银行业务调度系统需求 Ø 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗 ...

  10. 使用Mybatis-Generator自动生成Dao、Model、Mapping代码

    1.所需jar包 mybatis-generator-core-1.3.2.jar mybatis-generator-core-1.3.2.jar 可以去http://mvnrepository.c ...