国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

開發利器Hutool之MapProxy的妙用

開發 前端
目前公司項目中主要采用Hutool作為項目的工具包,相對于google的guava, hutool的工具類采用中文注釋,更加符合國人使用。所謂知己知彼,我們需要了解Hutool都具有什么樣的功能,才能夠最大化發揮它的價值。

概述

Hutool是一個小而全的Java工具類庫,通過靜態方法封裝,降低相關API的學習成本,提高工作效率,使Java擁有函數式語言般的優雅,讓Java語言也可以“甜甜的”。

目前公司項目中主要采用Hutool作為項目的工具包,相對于google的guava, hutool的工具類采用中文注釋,更加符合國人使用。所謂知己知彼,我們需要了解Hutool都具有什么樣的功能,才能夠最大化發揮它的價值。

本文主要就hutool 5.8.8版本中MapProxy的使用。

場景引入

其實Map在get的時候是比較危險的,你可能不知道它是什么類型,需要進行強制,舉個例子如下:

@Test
public void testMapProxy1() {
Map<String, Object> userMap = MapUtil.newHashMap(16);
userMap.put("username", "alvin");
userMap.put("age", 20);

// 使用map的時候, 需要進行強轉,一旦類型錯誤,會報錯
String age = (String)userMap.get("age");
}

運行結果:

圖片

那有什么更好的解決方案嗎?Hutool提供了一種解決方案給我們。

MapProxy使用

依賴引入

<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.8</version>
</dependency>

定義一個可訪問接口

interface MapUser {
String getUsername();

Integer getAge();

MapUser setAge(Integer age);
}

通過MapProxy訪問

@Test
public void testMapProxy2() {
Map<String, Object> userMap = MapUtil.newHashMap(16);
userMap.put("username", "alvin");
userMap.put("age", 20);

MapProxy mapProxy = MapProxy.create(userMap);
Integer age = mapProxy.getInt("age", 18);
Assert.assertTrue(age == 20);

// 通過代理的方式
MapUser mapUser = mapProxy.toProxyBean(MapUser.class);
// 后續訪問會變的更加安全
Assert.assertTrue(mapUser.getAge() == 20);

mapUser.setAge(30);
Assert.assertTrue(mapUser.getAge() == 30);
}

MapProxy源碼解析

Map代理,提供各種getXXX方法,并提供默認值支持,它的類結構圖如下:

圖片

  • 實現了OptNullBasicTypeFromObjectGetter接口, 提供了基本類型的get, 在不提供默認值的情況下, 如果值不存在或獲取錯誤,返回null, 比如:mapProxy.getInt("age", 18)
  • 實現了InvocationHandler接口,支持jdk的動態代理,生成代理對象。
public <T> T toProxyBean(Class<T> interfaceClass) {
return (T) Proxy.newProxyInstance(ClassLoaderUtil.getClassLoader(), new Class<?>[]{interfaceClass}, this);
}
  • toProxyBean方法就是生成代理對象,最終會調用代理類的invoke方法,這里的代理類就是MapProxy本身。
public Object invoke(Object proxy, Method method, Object[] args) {
final Class<?>[] parameterTypes = method.getParameterTypes();
// 如果調用方法參數為空
if (ArrayUtil.isEmpty(parameterTypes)) {
final Class<?> returnType = method.getReturnType();
// 方法返回值不是void
if (void.class != returnType) {
// 匹配Getter
final String methodName = method.getName();
String fieldName = null;
if (methodName.startsWith("get")) {
// 匹配getXXX
fieldName = StrUtil.removePreAndLowerFirst(methodName, 3);
} else if (BooleanUtil.isBoolean(returnType) && methodName.startsWith("is")) {
// 匹配isXXX
fieldName = StrUtil.removePreAndLowerFirst(methodName, 2);
}else if ("hashCode".equals(methodName)) {
return this.hashCode();
} else if ("toString".equals(methodName)) {
return this.toString();
}

if (StrUtil.isNotBlank(fieldName)) {
if (false == this.containsKey(fieldName)) {
// 駝峰不存在轉下劃線嘗試
fieldName = StrUtil.toUnderlineCase(fieldName);
}
return Convert.convert(method.getGenericReturnType(), this.get(fieldName));
}
}

// 如果方法參數不為空
} else if (1 == parameterTypes.length) {
// 匹配Setter
final String methodName = method.getName();
if (methodName.startsWith("set")) {
final String fieldName = StrUtil.removePreAndLowerFirst(methodName, 3);
if (StrUtil.isNotBlank(fieldName)) {
this.put(fieldName, args[0]);
final Class<?> returnType = method.getReturnType();
// 判斷返回類型是不是代理類的實例
if(returnType.isInstance(proxy)){
return proxy;
}
}
} else if ("equals".equals(methodName)) {
return this.equals(args[0]);
}
}

throw new UnsupportedOperationException(method.toGenericString());
}

總結

本文主要講解了Hutool中的MapProxy類的使用,希望對大家有幫助。

責任編輯:武曉燕 來源: JAVA旭陽
相關推薦

2019-10-18 16:05:32

框架開發Java

2022-09-21 08:16:18

緩存框架

2024-03-19 07:00:00

C++編程pragma

2022-10-26 09:57:52

VectorRustC++

2018-11-26 07:04:59

神經網絡優化函數

2023-07-19 12:24:48

C++constexpr?語句

2023-10-16 16:05:44

PythonPyCharm編程語言

2021-09-02 07:04:44

Go 開發利器

2010-03-10 17:57:54

Python編程語言

2024-03-05 10:41:51

Rollup前端開發

2024-03-22 09:45:34

大型語言模型Unity引擎游戲開發

2012-06-25 17:21:15

天天記事

2011-11-14 09:17:14

Linux運維ClusterShel

2024-04-25 08:22:43

AndroidlargeHeap屬性

2021-08-30 10:19:05

PyFlink 開發環境Zeppelin No

2023-09-28 21:39:26

HutoolJava工具包

2021-12-09 06:59:24

FlinkSQL 開發

2010-09-26 09:50:36

SQL Where子句

2023-11-27 19:35:01

C++extern

2023-08-01 09:46:57

虛擬鍵盤API
點贊
收藏

51CTO技術棧公眾號

亚洲人成网站在线| 久久久www免费人成黑人精品| 91精品久久久久久综合五月天| 日本一区二区三级电影在线观看| 一本色道久久99精品综合| 欧美高清一区| 91久久久久久久一区二区| 免费观看久久av| 久久久久久久激情视频| 主播大秀视频在线观看一区二区| 亚洲白拍色综合图区| 九义人在线观看完整免费版电视剧| 精品女厕一区二区三区| 美女的尿口免费视频| 国产人久久人人人人爽| 青青草国产免费| 国产精品影视在线| 一级黄色录像免费看| 蜜臀a∨国产成人精品| 日韩欧美视频一区二区三区四区| 亚洲在线播放| 欧美三级网色| 日韩电影一区二区三区四区| 日韩av图片| 久热成人在线视频| 樱空桃在线播放| 国产**成人网毛片九色| 五十路熟女丰满大屁股| 久久精品亚洲精品国产欧美kt∨| 久久久久国产精品熟女影院| 国产精品日韩成人| 久草在线官网| 欧美亚洲综合色| 啦啦啦中文在线观看日本| 日韩电影免费在线观看中文字幕| 亚洲天堂一区二区| 久久久久久久香蕉网| 成人激情电影在线| 91精品视频在线免费观看| 亚洲国产国产亚洲一二三| 日韩精彩视频| 菠萝蜜视频在线观看一区| 国产天堂在线播放| 亚洲一区二区美女| 日韩在线观看www| 日韩第一页在线| 超碰97久久| 91免费欧美精品| 久久久久国产精品一区三寸| 欧美 日韩 国产 在线观看| 久久精品夜夜夜夜久久| 又黄又爽无遮挡| 欧美精品色综合| 国外成人福利视频| 国产精品久久久一区| 久久综合五月| 霍思燕三级露全乳照| 亚洲一区在线观看网站| 超碰人人在线| 欧美福利小视频| 欧美激情日韩| 激情伊人五月天| 欧美性猛交xxxx富婆弯腰| www.91在线| 日韩小视频网址| 久久国产成人精品| 亚洲巨乳在线观看| 中文字幕亚洲一区二区va在线| 香蕉视频在线播放| 日韩亚洲在线观看| 亚洲欧美综合国产精品一区| 少妇久久久久久被弄到高潮| 亚洲成av人影院在线观看网| 小草在线视频免费播放| 国产精品高精视频免费| 久久国产剧场电影| av在线www| 一本色道久久综合狠狠躁篇怎么玩 | 亚洲欧洲韩国日本视频| 日本中文字幕电影在线免费观看| 最新国产精品拍自在线播放| 亚洲精品二区三区| 成人黄色片视频| 欧美理论电影在线| 荡女精品导航| 在线国产精品网| 无码av中文一区二区三区桃花岛| 欧美三区四区| 国内精品视频免费| 一区二区三区在线观看国产| 美女av在线免费看| 亚洲一区二区三区四区视频| 99久久国产综合精品色伊| 免费黄色电影在线观看| 日韩黄色影视| 亚洲激情国产精品| 欧美大胆性生话| 精品久久国产97色综合| 日日碰狠狠添天天爽超碰97| 福利视频一区二区| 涩涩涩久久久成人精品| 美女亚洲精品| 亚洲国产日产av| 福利一区三区| 美国av在线播放| 51精品秘密在线观看| 成人毛片免费看| 女人另类性混交zo| 日韩精品视频在线播放| 99久精品视频在线观看视频| 激情五月亚洲色图| 国产一区二区三区直播精品电影| 亚洲女同同性videoxma| 国产乱视频在线观看| 国产精品偷伦一区二区| 国产精品护士白丝一区av| 福利一区和二区| 国产又粗又爽又黄的视频| 8v天堂国产在线一区二区| 欧美jjzz| 免费黄色在线视频网站| 国产欧美日韩免费| 亚洲一区二区三区四区的| 中文字幕亚洲在线观看| 亚洲中文字幕无码不卡电影| 在线视频欧美日韩| 国产成人精品一区二| 欧美aa在线| 久久久久久九九九九| 欧美日韩你懂的| 精品动漫3d一区二区三区免费版 | 亚洲一区欧美二区| 成人性生交大片免费看午夜| 亚洲尤物视频网| 欧美午夜xxx| 欧美日本中文| 成人在线视频成人| 久久国产欧美精品| 欧美成人乱码一区二区三区| 全部av―极品视觉盛宴亚洲| 欧美草逼视频| 8x8x华人在线| 久久天天躁狠狠躁夜夜av| 久久久久久久久免费| 国偷自产av一区二区三区| 2020中文字幕在线| 成人妇女免费播放久久久| 欧洲色大大久久| 翔田千里一区二区| 福利在线导航136| 欧美午夜小视频| 久久免费观看视频| 亚洲成人精品一区| 亚洲美女少妇无套啪啪呻吟| 福利视频在线| 国产午夜福利100集发布| 97在线看福利| 在线观看视频欧美| 久久99精品久久久久久动态图| 欧美不卡高清一区二区三区| 国产偷人视频免费| 国产又爽又黄的激情精品视频| 欧美影院一区二区三区| 秋霞午夜鲁丝一区二区老狼| 日日夜夜一区| 免费看成年人视频在线观看| 成人欧美一区二区三区在线观看 | 免费在线黄色影片| 亚洲图片欧洲图片日韩av| 永久免费精品影视网站| 亚洲欧美日韩综合aⅴ视频| 欧美日韩18| 日韩三级影视| 激情综合网五月激情 | www欧美在线观看| 传媒视频在线| 日日夜夜精品网站| 久久久噜噜噜久久中文字免| 在线观看网站黄不卡| 国产91精品一区二区麻豆亚洲| 精品色999| 天天免费亚洲黑人免费| 男女激情片在线观看| 在线不卡日本| 1769国产精品| 日韩一区二区三区在线观看| 91蜜桃免费观看视频| 影音先锋久久久| 欧美美女福利视频| 国产免费视频在线| 农村妇女精品一二区| 国产一区二区无遮挡| 欧美成aaa人片免费看| 欧美精品丝袜中出| 日韩一区在线免费观看| 久久精品999| 99久久夜色精品国产亚洲狼| av在线一区不卡| 日本免费在线视频| 又黄又爽毛片免费观看|