亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

@Data注解在Boolean類型屬性上的大坑及解決

 更新時間:2024年10月29日 08:50:40   作者:學習使得吾快樂  
在使用@Data注解時,如果類中存在Boolean類型的屬性,且屬性名不是以"is"開頭,那么@Data注解生成的get方法名會默認加上"is",導致屬性值無法成功拷貝,解決方法是手動添加get方法,覆蓋@Data注解生成的方法

@Data注解在Boolean類型屬性上的大坑

直接看總結吧

問題描述

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

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

具體描述信息

  • 類A:
@Data
public class A {
    private String id;
    private String name;
    private boolean sex;
}
  • 類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(); // 獲取來源的字段
		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 )
			{
				// 設置異常,可能會沒有對應字段,忽略
				extraJson.put( name, value );
			}
		}
		try
		{
			toMethodAccess.invoke( to, "set" + StringUtils.capitalize( extra ), extraJson.toJSONString() );
		}
		catch ( Exception e )
		{
			log.error( "將數(shù)據放置到擴展字段失敗", e );
		}

	}

結果

可以明顯看到id屬性已經拷貝成功,多余的屬性name和sex name已經進入了extraElement中,唯獨sex沒有拷貝成功

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

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

對于Boolean類型的數(shù)據, @Data給到的get方法名默認為isSex而不是getSex

問題解決

手動添加get方法,覆蓋掉@Data注解的方法

再次運行:

問題解決!

問題總結

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

場景1

boolean sex;

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

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

場景2

如果已經有了is則就是正常形式了:

boolean isGirl;

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

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

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • java編寫冒泡排序的完整示例

    java編寫冒泡排序的完整示例

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

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

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

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

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

    SpringBoot應用線上重啟腳本的命令詳解

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

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

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

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

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

    Java 對10個數(shù)進行排序的實現(xiàn)代碼

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

    詳解Java?token主流框架之JWT

    JWT(JSON?Web?Token)是一種基于JSON格式的輕量級的、用于身份認證的開放標準,它通過在用戶和服務器之間傳遞一個安全的、可靠的、獨立的JSON對象來進行身份驗證和授權,本文將詳細給大家介紹Java?token主流框架之JWT,需要的朋友可以參考下
    2023-05-05
  • Java解決程序包不存在的問題解決

    Java解決程序包不存在的問題解決

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

    基于Java類的加載方式

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

最新評論