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

@Data注解在Boolean類(lèi)型屬性上的大坑及解決

 更新時(shí)間:2024年10月29日 08:50:40   作者:學(xué)習(xí)使得吾快樂(lè)  
在使用@Data注解時(shí),如果類(lèi)中存在Boolean類(lèi)型的屬性,且屬性名不是以"is"開(kāi)頭,那么@Data注解生成的get方法名會(huì)默認(rèn)加上"is",導(dǎo)致屬性值無(wú)法成功拷貝,解決方法是手動(dòng)添加get方法,覆蓋@Data注解生成的方法

@Data注解在Boolean類(lèi)型屬性上的大坑

直接看總結(jié)吧

問(wèn)題描述

將A類(lèi)的值拷貝到B類(lèi),且A類(lèi)中多余的屬性存放到B類(lèi)的extraElement屬性中;

發(fā)現(xiàn)問(wèn)題:Boolean屬性的字段沒(méi)有完成拷貝

具體描述信息

  • 類(lèi)A:
@Data
public class A {
    private String id;
    private String name;
    private boolean sex;
}
  • 類(lèi)B:
@Data
public class B {
    private String id;
    private String extraElement;
}

拷貝的代碼

	public static void main(String[] args) {
		A a = new A();
		a.setId(Pub.getUUID());
		a.setSex(true);
		a.setName("test");
		B b = new B();
		ToolBeans.copyPropertiesToExtra( a, b, "extraElement" );
		System.out.println(a);
		System.out.println(b);
		System.out.println(b.getExtraElement());
	}
	public static <F, T> void copyPropertiesToExtra( F from, T to, String extra )
	{
		MethodAccess fromMethodAccess = get( from.getClass() );
		MethodAccess toMethodAccess = get( to.getClass() );
		Field[] fromDeclaredFields = from.getClass().getDeclaredFields(); // 獲取來(lái)源的字段
		JSONObject extraJson = new JSONObject();

		for ( Field field : fromDeclaredFields )
		{
			String name = field.getName();
			Object value = null;
			try
			{
				value = fromMethodAccess.invoke( from, "get" + StringUtils.capitalize( name ), null );
				toMethodAccess.invoke( to, "set" + StringUtils.capitalize( name ), value );
			}
			catch ( Exception e )
			{
				// 設(shè)置異常,可能會(huì)沒(méi)有對(duì)應(yīng)字段,忽略
				extraJson.put( name, value );
			}
		}
		try
		{
			toMethodAccess.invoke( to, "set" + StringUtils.capitalize( extra ), extraJson.toJSONString() );
		}
		catch ( Exception e )
		{
			log.error( "將數(shù)據(jù)放置到擴(kuò)展字段失敗", e );
		}

	}

結(jié)果

可以明顯看到id屬性已經(jīng)拷貝成功,多余的屬性name和sex name已經(jīng)進(jìn)入了extraElement中,唯獨(dú)sex沒(méi)有拷貝成功

發(fā)現(xiàn)原因

通過(guò)追源碼后發(fā)現(xiàn)

對(duì)于Boolean類(lèi)型的數(shù)據(jù), @Data給到的get方法名默認(rèn)為isSex而不是getSex

問(wèn)題解決

手動(dòng)添加get方法,覆蓋掉@Data注解的方法

再次運(yùn)行:

問(wèn)題解決!

問(wèn)題總結(jié)

添加@Data注解時(shí), 如果有boolean屬性的數(shù)據(jù),且屬性的名字還不是is開(kāi)頭的,則默認(rèn)的get方法就會(huì)把is給加上

場(chǎng)景1

boolean sex;

在加上@Data注解后得到的get set方法為

set方法正常但get方法是 isSex() 而不是 getSex()

場(chǎng)景2

如果已經(jīng)有了is則就是正常形式了:

boolean isGirl;

在加上@Data注解后得到的get,set方法為

  • get方法為isGirl() 而不是getIsGirl()
  • set方法為setGirl 而不是setIsGirl()

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java編寫(xiě)冒泡排序的完整示例

    java編寫(xiě)冒泡排序的完整示例

    這篇文章主要給大家介紹了關(guān)于java編寫(xiě)冒泡排序的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • java創(chuàng)建txt文件并存入內(nèi)容

    java創(chuàng)建txt文件并存入內(nèi)容

    這篇文章主要為大家詳細(xì)介紹了java創(chuàng)建txt文件并存入內(nèi)容,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Java Synchronized字節(jié)碼層分析體驗(yàn)

    Java Synchronized字節(jié)碼層分析體驗(yàn)

    這篇文章主要介紹了Java Synchronized字節(jié)碼層分析,synchronized關(guān)鍵字解決了多個(gè)線(xiàn)程之間的資源同步性,synchronized關(guān)鍵字保證了它修飾的方法或者代碼塊任意時(shí)刻只有一個(gè)線(xiàn)程在訪(fǎng)問(wèn)
    2023-04-04
  • SpringBoot應(yīng)用線(xiàn)上重啟腳本的命令詳解

    SpringBoot應(yīng)用線(xiàn)上重啟腳本的命令詳解

    這篇文章主要介紹了SpringBoot應(yīng)用線(xiàn)上重啟腳本,通過(guò)查找應(yīng)用進(jìn)程PID,殺死應(yīng)用進(jìn)程PID,運(yùn)行啟動(dòng)腳本,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • SpringMVC五大組件與執(zhí)行原理分析總結(jié)

    SpringMVC五大組件與執(zhí)行原理分析總結(jié)

    這篇文章主要介紹了SpringMVC五大組件與執(zhí)行原理分析總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-01-01
  • Java中避免空指針異常的方法

    Java中避免空指針異常的方法

    這篇文章主要介紹了Java中避免空指針異常的方法,本文討論Optional類(lèi)型、Objects類(lèi)等技術(shù),需要的朋友可以參考下
    2014-10-10
  • Java 對(duì)10個(gè)數(shù)進(jìn)行排序的實(shí)現(xiàn)代碼

    Java 對(duì)10個(gè)數(shù)進(jìn)行排序的實(shí)現(xiàn)代碼

    可以利用選擇法,即從后9個(gè)比較過(guò)程中,選擇一個(gè)最小的與第一個(gè)元素交換, 下次類(lèi)推,即用第二個(gè)元素與后8個(gè)進(jìn)行比較,并進(jìn)行交換
    2017-02-02
  • 詳解Java?token主流框架之JWT

    詳解Java?token主流框架之JWT

    JWT(JSON?Web?Token)是一種基于JSON格式的輕量級(jí)的、用于身份認(rèn)證的開(kāi)放標(biāo)準(zhǔn),它通過(guò)在用戶(hù)和服務(wù)器之間傳遞一個(gè)安全的、可靠的、獨(dú)立的JSON對(duì)象來(lái)進(jìn)行身份驗(yàn)證和授權(quán),本文將詳細(xì)給大家介紹Java?token主流框架之JWT,需要的朋友可以參考下
    2023-05-05
  • Java解決程序包不存在的問(wèn)題解決

    Java解決程序包不存在的問(wèn)題解決

    在Java編程中,我們可以使用Maven或Gradle等構(gòu)建工具來(lái)管理依賴(lài)庫(kù),本文主要介紹了Java解決程序包不存在的問(wèn)題解決,具有一定的參考價(jià)值,感興趣的可以了解 一下
    2023-12-12
  • 基于Java類(lèi)的加載方式

    基于Java類(lèi)的加載方式

    這篇文章主要介紹了基于Java類(lèi)的加載方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評(píng)論