欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java如何獲取對(duì)象屬性及對(duì)應(yīng)值

 更新時(shí)間:2020年11月10日 10:05:04   作者:牛鼻子老趙  
這篇文章主要介紹了Java如何獲取對(duì)象屬性及對(duì)應(yīng)值,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

利用反射獲取對(duì)象的所有屬性及對(duì)應(yīng)的值

1、獲取屬性名數(shù)組

private static String[] getFiledName(Object o) {
    Field[] fields = o.getClass().getDeclaredFields();
    String[] fieldNames = new String[fields.length];
    for (int i = 0; i < fields.length; i++) {
      fieldNames[i] = fields[i].getName();
    }
    return fieldNames;
  }

2、根據(jù)屬性名獲取屬性值

private static Object getFieldValueByName(String fieldName, Object o) {
    try {
      String firstLetter = fieldName.substring(0, 1).toUpperCase();
      String getter = "get" + firstLetter + fieldName.substring(1);
      Method method = o.getClass().getMethod(getter, new Class[] {});
      Object value = method.invoke(o, new Object[] {});
      return value;
    } catch (Exception e) {
      logger.error("獲取屬性值失??!" + e, e);
    }
    return null;
  }

3、獲取屬性的數(shù)據(jù)類型

private static Object getFiledType(String fieldName, Object o) {
    Field[] fields = o.getClass().getDeclaredFields();
    for (Field field : fields) {
      if (Objects.equals(fieldName, field.getName())) {
        return field.getType();
      }
    }
    return null;
  }

4、完整代碼及其引入的包

package com.hao.search;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Joiner;

public class ObjectPaseUtils {

  private static Logger logger = LoggerFactory.getLogger(ObjectPaseUtils.class);

  /**
   * @desc 將對(duì)象轉(zhuǎn)換成指定String
   * @param <T>
   * @param t
   * @return
   */
  public static <T> String objectToStr(T t) {
    List<String> list = new ArrayList<String>();
    String[] fieldNames = getFiledName(t);
    for (int i = 0; i < fieldNames.length; i++) {
      String name = fieldNames[i];
      Object value = getFieldValueByName(name, t);
      if (null != value) {
        if (getFiledType(name, t).equals(Date.class)) {
          value = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date)value);
        }
        list.add(name + " : " + value);
      }
    }
    if (CollectionUtils.isNotEmpty(list)) {
      return Joiner.on("\r").skipNulls().join(list);
    }
    return null;
  }

  /**
   * @desc 獲取屬性名數(shù)組
   * @param o
   * @return
   */
  private static String[] getFiledName(Object o) {
    Field[] fields = o.getClass().getDeclaredFields();
    String[] fieldNames = new String[fields.length];
    for (int i = 0; i < fields.length; i++) {
      fieldNames[i] = fields[i].getName();
    }
    return fieldNames;
  }

  /**
   * @desc 根據(jù)屬性名獲取屬性值
   * @param fieldName
   * @param o
   * @return
   */
  private static Object getFieldValueByName(String fieldName, Object o) {
    try {
      String firstLetter = fieldName.substring(0, 1).toUpperCase();
      String getter = "get" + firstLetter + fieldName.substring(1);
      Method method = o.getClass().getMethod(getter, new Class[] {});
      Object value = method.invoke(o, new Object[] {});
      return value;
    } catch (Exception e) {
      logger.error("獲取屬性值失敗!" + e, e);
    }
    return null;
  }

  /**
   * @desc 獲取屬性的數(shù)據(jù)類型
   * @param fieldName
   * @param o
   * @return
   */
  private static Object getFiledType(String fieldName, Object o) {
    Field[] fields = o.getClass().getDeclaredFields();
    for (Field field : fields) {
      if (Objects.equals(fieldName, field.getName())) {
        return field.getType();
      }
    }
    return null;
  }

}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot快速整合通用Mapper的示例代碼

    SpringBoot快速整合通用Mapper的示例代碼

    后端業(yè)務(wù)開發(fā),每個(gè)表都要用到單表的?增刪改查?等通用方法,而配置了通用Mapper可以極大的方便使用Mybatis單表的增刪改查操作,這篇文章主要介紹了SpringBoot快速整合通用Mapper,需要的朋友可以參考下
    2022-07-07
  • 使用Java8實(shí)現(xiàn)模板方法模式的改造

    使用Java8實(shí)現(xiàn)模板方法模式的改造

    這篇文章主要為大家詳細(xì)介紹了如何使用Java8實(shí)現(xiàn)模板方法模式的改造,文中的示例代碼講解詳細(xì),對(duì)我們深入了解java8有一定的幫助,感興趣的可以了了解一下
    2023-01-01
  • java報(bào)錯(cuò):“錯(cuò)誤:編碼GBK?的不可映射字符”解決辦法

    java報(bào)錯(cuò):“錯(cuò)誤:編碼GBK?的不可映射字符”解決辦法

    當(dāng)Java源代碼中包含中文字符時(shí),我們?cè)谟胘avac編譯時(shí)會(huì)出現(xiàn)“錯(cuò)誤:編碼GBK的不可映射字符”,這篇文章主要給大家介紹了關(guān)于java報(bào)錯(cuò):“錯(cuò)誤:編碼GBK?的不可映射字符”的解決辦法,需要的朋友可以參考下
    2024-08-08
  • Java?IO篇之Reactor?網(wǎng)絡(luò)模型的概念

    Java?IO篇之Reactor?網(wǎng)絡(luò)模型的概念

    Reactor?模式也叫做反應(yīng)器設(shè)計(jì)模式,是一種為處理服務(wù)請(qǐng)求并發(fā)提交到一個(gè)或者多個(gè)服務(wù)處理器的事件設(shè)計(jì)模式,Reactor?模式主要由?Reactor?和處理器?Handler?這兩個(gè)核心部分組成,本文給大家介紹Java?IO篇之Reactor?網(wǎng)絡(luò)模型的概念,感興趣的朋友一起看看吧
    2022-01-01
  • springboot如何集成Minio文件服務(wù)器

    springboot如何集成Minio文件服務(wù)器

    這篇文章主要介紹了springboot如何集成Minio文件服務(wù)器問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 拉鉤網(wǎng)java筆試題分享

    拉鉤網(wǎng)java筆試題分享

    這篇文章主要介紹了拉鉤網(wǎng)java筆試題分享,下面是題目和實(shí)現(xiàn)示例,需要的朋友可以參考下
    2014-05-05
  • 解析Apache Dubbo的SPI實(shí)現(xiàn)機(jī)制

    解析Apache Dubbo的SPI實(shí)現(xiàn)機(jī)制

    SPI全稱為Service Provider Interface,對(duì)應(yīng)中文為服務(wù)發(fā)現(xiàn)機(jī)制。SPI類似一種可插拔機(jī)制,首先需要定義一個(gè)接口或一個(gè)約定,然后不同的場(chǎng)景可以對(duì)其進(jìn)行實(shí)現(xiàn),調(diào)用方在使用的時(shí)候無(wú)需過(guò)多關(guān)注具體的實(shí)現(xiàn)細(xì)節(jié)
    2021-06-06
  • Java 多線程并發(fā)AbstractQueuedSynchronizer詳情

    Java 多線程并發(fā)AbstractQueuedSynchronizer詳情

    這篇文章主要介紹了Java 多線程并發(fā)AbstractQueuedSynchronizer詳情,文章圍繞主題展開想象的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-06-06
  • SpringBoot之LogBack配置詳解

    SpringBoot之LogBack配置詳解

    這篇文章主要介紹了SpringBoot之LogBack配置詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • Java之HashMap.values()轉(zhuǎn)List時(shí)的錯(cuò)誤和正確演示

    Java之HashMap.values()轉(zhuǎn)List時(shí)的錯(cuò)誤和正確演示

    這篇文章主要介紹了Java之HashMap.values()轉(zhuǎn)List時(shí)的錯(cuò)誤和正確演示,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評(píng)論