最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

直接看總結(jié)吧

問題描述

將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 )
			{
				// 設(shè)置異常,可能會沒有對應(yīng)字段,忽略
				extraJson.put( name, value );
			}
		}
		try
		{
			toMethodAccess.invoke( to, "set" + StringUtils.capitalize( extra ), extraJson.toJSONString() );
		}
		catch ( Exception e )
		{
			log.error( "將數(shù)據(jù)放置到擴展字段失敗", e );
		}

	}

結(jié)果

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

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

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

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

問題解決

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

再次運行:

問題解決!

問題總結(jié)

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

場景1

boolean sex;

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

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

場景2

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

boolean isGirl;

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

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

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

相關(guān)文章

  • 詳解Java事件編程的使用

    詳解Java事件編程的使用

    Java事件在很多地方都可以使用,合理的使用事件編程,相比常規(guī)邏輯的編程,這可達到主次分明,讓程序吞吐量即處理能力更強,改動更少,下面我們舉一個例子說明如何使用Java使用,需要的朋友可以參考下
    2021-06-06
  • Java實現(xiàn)動態(tài)驗證碼生成

    Java實現(xiàn)動態(tài)驗證碼生成

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)動態(tài)驗證碼生成,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • MyBatis注解實現(xiàn)動態(tài)SQL問題

    MyBatis注解實現(xiàn)動態(tài)SQL問題

    這篇文章主要介紹了MyBatis注解實現(xiàn)動態(tài)SQL問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Spring Security十分鐘入門教程

    Spring Security十分鐘入門教程

    這篇文章主要介紹了Spring Security入門教程,Spring Security是一個能夠為基于Spring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框架
    2022-09-09
  • 用Java實現(xiàn)簡單畫板功能

    用Java實現(xiàn)簡單畫板功能

    這篇文章主要為大家詳細(xì)介紹了用Java實現(xiàn)簡單畫板功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Spring MVC如何設(shè)置請求頭和響應(yīng)頭的Header

    Spring MVC如何設(shè)置請求頭和響應(yīng)頭的Header

    這篇文章主要介紹了Spring MVC如何設(shè)置請求頭和響應(yīng)頭的Header問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • SpringBoot如何使用applicationContext.xml配置文件

    SpringBoot如何使用applicationContext.xml配置文件

    這篇文章主要介紹了SpringBoot使用applicationContext.xml配置文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring Boot Controller處理HTTP請求體的方法

    Spring Boot Controller處理HTTP請求體的方法

    Spring Boot提供了強大的機制來處理不同 Content-Type? 的HTTP請求體,這主要依賴于 HttpMessageConverter? 接口的各種實現(xiàn),它們能夠自動將請求體內(nèi)容轉(zhuǎn)換成Java方法參數(shù),本文給大家介紹Spring Boot Controller處理HTTP請求體的方法,感興趣的朋友一起看看吧
    2025-05-05
  • 詳解java開啟異步線程的幾種方法(@Async,AsyncManager,線程池)

    詳解java開啟異步線程的幾種方法(@Async,AsyncManager,線程池)

    在springboot框架中,可以使用注解簡單實現(xiàn)線程的操作,還有AsyncManager的方式,如果需要復(fù)雜的線程操作,可以使用線程池實現(xiàn),本文通過實例代碼介紹java開啟異步線程的幾種方法(@Async,AsyncManager,線程池),感興趣的朋友一起看看吧
    2023-09-09
  • Java Volatile關(guān)鍵字實現(xiàn)原理過程解析

    Java Volatile關(guān)鍵字實現(xiàn)原理過程解析

    這篇文章主要介紹了Java Volatile關(guān)鍵字實現(xiàn)原理過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03

最新評論

龙口市| 昭通市| 平昌县| 卢龙县| 漳浦县| 资阳市| 兴安县| 七台河市| 星座| 红安县| 金溪县| 辽源市| 七台河市| 澄城县| 双桥区| 德惠市| 盈江县| 建阳市| 齐河县| 五原县| 巴塘县| 双城市| 麻栗坡县| 酒泉市| 郑州市| 通州市| 石家庄市| 丹巴县| 景泰县| 中山市| 榕江县| 泗阳县| 永嘉县| 特克斯县| 岫岩| 常德市| 汝阳县| 钟祥市| 防城港市| 湘西| 澳门|