javaBean对象toString方法

本文介绍了一个Java工具类,用于通过反射获取对象的属性值。该工具类支持不同类型的JavaBean,并能遍历其所有字段,获取并返回每个字段的名称及对应的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.baic.core.base.util;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class GetPropertyValue {

 public final static String getPropertyValue(Object obj) {
  if(obj==null){
   return null;
  }else{
   if (String.class.isInstance(obj)
     || Integer.class.isInstance(obj)
     || Double.class.isInstance(obj)
     || Float.class.isInstance(obj)
     || Long.class.isInstance(obj)
     || Short.class.isInstance(obj)) {
    return (String) obj;
   } else {
    StringBuffer strBuffer = new StringBuffer();
    Field[] fields = obj.getClass().getDeclaredFields();
    if (fields != null && fields.length > 0) {
     for (int i = 0, j = fields.length; i < j; i++) {
      strBuffer.append(fields[i].getName() + ":");
      Method getMethod = getPropertyDescriptor(obj.getClass(),
        fields[i].getName()).getReadMethod();
      if (getMethod != null) {
       try {
        strBuffer.append(String.valueOf(getProperty(obj,fields[i].getName()))
          + "##");
       } catch (Exception e) {
        strBuffer.append("##");
       }
      } else {
       strBuffer.append("##");
      }
     }
    } else {
     return strBuffer.toString();
    }
    return strBuffer.toString();
   }
  }
  
 }

 /**
  * <p>方法描述: [方法功能中文描述]</p>
  *
  * @param clazz 参数说明
  * @param propertyName 参数说明
  *
  * @return 返回结果的说明
  */
 @SuppressWarnings("unchecked")
 public static PropertyDescriptor getPropertyDescriptor(Class clazz,
   String propertyName) {
  StringBuffer sb = new StringBuffer(); //构建一个可变字符串用来构建方法名称
  Method setMethod = null;
  Method getMethod = null;
  PropertyDescriptor pd = null;

  try {
   Field f = clazz.getDeclaredField(propertyName); //根据字段名来获取字段

   if (f != null) {
    //构建方法的后缀
    String methodEnd = propertyName.substring(0, 1).toUpperCase()
      + propertyName.substring(1);

    sb.append("set" + methodEnd); //构建set方法
    //构建set 方法

    setMethod = clazz.getDeclaredMethod(sb.toString(),
      new Class[] { f.getType() });
    sb.delete(0, sb.length()); //清空整个可变字符串
    sb.append("get" + methodEnd); //构建get方法
    //构建get 方法

    getMethod = clazz.getDeclaredMethod(sb.toString(),
      new Class[] {});
    //构建一个属性描述器 把对应属性 propertyName 的 get 和 set 方法保存到属性描述器中
    pd = new PropertyDescriptor(propertyName, getMethod, setMethod);
   }
  } catch (Exception ex) {
   ex.printStackTrace();
  }

  return pd;
 }
 
 public static Object getProperty(Object obj, String propertyName) {
        PropertyDescriptor pd = getPropertyDescriptor(obj.getClass(), propertyName); //获取 clazz 类型中的 propertyName 的属性描述器
        Method getMethod = pd.getReadMethod(); //从属性描述器中获取 get 方法
        Object value = null;

        try {
            value = getMethod.invoke(obj, new Object[]{  }); //调用方法获取方法的返回值
        } catch (Exception e) {
            e.printStackTrace();
        }

        return value; //返回值
    }

}

 

### 创建JavaBean对象封装日志记录 为了实现日志功能,可以创建一个 `LogRecord` 的 JavaBean 来封装每条日志的信息。这不仅有助于提高代码的可维护性和重用性,还使得程序结构更加清晰[^1]。 #### 定义 LogRecord 类 下面是一个简单的 `LogRecord` 实现: ```java public class LogRecord { private String id; private String level; private String message; private String timestamp; public LogRecord() {} // Getters and Setters public String getId() { return id; } public void setId(String id) { this.id = id; } public String getLevel() { return level; } public void setLevel(String level) { this.level = level; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String getTimestamp() { return timestamp; } public void setTimestamp(String timestamp) { this.timestamp = timestamp; } } ``` 通过上述方式定义的日志实体类,能够方便地用于存储和处理来自不同源的日志信息。当从数据库或其他持久化层加载数据时,可以直接映射到此类实例上;同样,在向外部系统发送或保存新的日志项之前也可以先构建这样的 Bean 对象[^2]。 #### 数据库交互与 ORM 映射 如果涉及到将这些日志记录存入关系型数据库,则可以通过 JDBC 或者更高级别的框架如 Hibernate 进行操作。此时通常会采用面向对象的关系映射(ORM),即让每一个表对应于一个特定类型的 JavaBean。对于本案例中的 `LogRecord` 而言,就代表了一张名为 log_records 表的数据模型[^3]。 #### SQL 查询结果集转换成 List<LogRecord> 假设已经有一个执行好的 PreparedStatement 并获得了 ResultSet rs ,那么接下来就可以很容易地把每一行的结果转化为对应的 LogRecord 对象,并最终形成列表返回给调用方[^4]: ```java List<LogRecord> logs = new ArrayList<>(); while (rs.next()) { LogRecord record = new LogRecord(); record.setId(rs.getString("id")); record.setLevel(rs.getString("level")); record.setMessage(rs.getString("message")); record.setTimestamp(rs.getTimestamp("timestamp").toString()); logs.add(record); } return logs; ``` 这样做的好处是可以简化业务逻辑层面的操作,同时也便于后续扩展其他功能模块或者与其他组件集成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值