成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊聊一段讓人抓心撓肝的源碼

開(kāi)發(fā) 前端
我今天想和各位小伙伴聊的其實(shí)還不是這個(gè)問(wèn)題,而是在上面的 Spring 源碼中,factoryBean 變量是在 if 分支中定義的,按理說(shuō),它的作用域就存在于 if 分支中,但是各位小伙伴注意,factoryBean 變量卻可以在下面的 if 中使用,這是咋回事呢?

加了松哥微信的小伙伴可能注意到松哥前兩天發(fā)的一個(gè)朋友圈了,就是我在錄制 Spring 源碼的時(shí)候,發(fā)現(xiàn)了這樣一段代碼:

為了大家閱讀方便,我這里只貼出來(lái)一些關(guān)鍵的部分:

protected Object getObjectForBeanInstance(
  Object beanInstance, String name, String beanName, @Nullable RootBeanDefinition mbd) {
    //省略
 if (!(beanInstance instanceof FactoryBean<?> factoryBean)) {
  return beanInstance;
 }
 //省略
 if (object == null) {
  //省略
  object = getObjectFromFactoryBean(factoryBean, beanName, !synthetic);
 }
 return object;
}

這段代碼里有一個(gè)比較好玩的地方就是使用了 JDK16 中引入的增強(qiáng)類(lèi)型推斷,以前我們用 instanceof 的時(shí)候可能是這樣:

if(a instanceof B){
  B b = (B)a;
}

這樣比較麻煩,所以從 JDK16 開(kāi)始,支持一種新的寫(xiě)法,如下:

if(a instanceof B b){
  //...
}

這段代碼跟上面的代碼的作用是一模一樣的。

最上面的 Spring 源碼其實(shí)就是用了這個(gè)最新的寫(xiě)法。

但是!!!

我今天想和各位小伙伴聊的其實(shí)還不是這個(gè)問(wèn)題,而是在上面的 Spring 源碼中,factoryBean 變量是在 if 分支中定義的,按理說(shuō),它的作用域就存在于 if 分支中,但是各位小伙伴注意,factoryBean 變量卻可以在下面的 if 中使用,這是咋回事呢?

大家看下下面這個(gè)截圖,這個(gè)是 Spring 框架在 2022.01.26 的提交日志,就是這一次提交修改了上面這個(gè) getObjectForBeanInstance 方法:

圖片圖片

從這段變更中,我們其實(shí)可以看到,在之前的 Spring 源碼中,是有專(zhuān)門(mén)的一行 FactoryBean<?> factory = (FactoryBean<?>) beanInstance; 去做類(lèi)型轉(zhuǎn)換的,然后在接下來(lái)的方法中去使用該變量,但是現(xiàn)在沒(méi)有這樣一句了,很明顯,現(xiàn)在是在 if 中做 instanceof 判斷時(shí)順手定義的 factoryBean 變量,在下面的 if 分支中使用了,這和我們理解的 Java 中變量的作用域似乎不太一樣。

這是咋回事呢?

前兩天我發(fā)個(gè)朋友圈之后,有小伙伴說(shuō)這是語(yǔ)法糖,這顯然不是,因?yàn)槿绻钦Z(yǔ)法糖,這很容易造成歧義,變量的作用域豈不是全亂了?

也有小伙伴說(shuō)這是新特性,這個(gè)很聰明,不認(rèn)識(shí)的寫(xiě)法統(tǒng)一都是新特性。但是新在哪里?什么樣的情況下可以在 if 之外使用 if 判斷條件里聲明的變量?什么樣的情況下不可以?

責(zé)任編輯:武曉燕 來(lái)源: 江南一點(diǎn)雨
相關(guān)推薦

2019-10-18 09:39:44

爬蟲(chóng)消息大數(shù)據(jù)

2019-10-14 09:51:08

爬蟲(chóng)網(wǎng)絡(luò)系統(tǒng)

2018-11-02 16:16:41

程序硬盤(pán)存儲(chǔ)

2022-10-20 17:40:47

GroovyJuelJava

2022-09-09 09:33:14

支付寶代碼性能

2020-05-29 08:14:49

代碼Try-Catch程序員

2020-04-03 10:14:57

內(nèi)存蠕蟲(chóng)代碼web安全

2022-06-21 12:27:12

JavaScript前端

2020-12-31 10:14:42

防注入代碼繞過(guò)

2020-01-03 16:06:38

代碼開(kāi)發(fā)工具

2018-01-17 09:44:37

LinuxUnix用戶(hù)訪問(wèn)

2016-03-28 10:19:54

代碼智慧人類(lèi)

2014-03-21 09:58:08

比特幣

2014-09-09 14:47:20

2020-05-20 15:05:22

戴爾

2020-03-13 09:08:00

5G頻譜

2014-07-08 09:21:10

死代碼創(chuàng)意歌曲

2018-06-19 08:02:00

統(tǒng)計(jì)程序微信

2021-04-08 09:14:24

js前端函數(shù)

2017-11-20 16:44:59

云端算力
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 97成人在线| 成人深夜小视频 | 国产综合在线视频 | 日本精品裸体写真集在线观看 | 国产色在线| 日韩中文字幕免费在线 | 午夜一区二区三区在线观看 | 亚洲成人一区 | 国产精品一区二区av | 极品在线 | 久久国产欧美日韩精品 | 国产成人久久av免费高清密臂 | 日本福利片 | 亚洲一区二区免费视频 | 中文字幕一区二区三区在线观看 | 久久久综合精品 | 一级黄色大片 | 亚洲国产精品va在线看黑人 | 久久合久久| 亚洲视频在线免费观看 | av中文在线播放 | 久久精品无码一区二区三区 | 欧美一区2区三区4区公司二百 | 欧美色性 | 狠狠艹 | 日韩一区二区三区在线 | 国产激情视频在线观看 | 亚洲97 | 国产精品免费一区二区 | 一级欧美黄色片 | 国产亚洲精品久久久久动 | 久久久精品亚洲 | 亚洲天堂一区二区 | av网站免费看| 在线观看第一区 | 成人免费毛片片v | 一区二区三区高清不卡 | 精品国产91乱码一区二区三区 | 国产99久久精品 | 成人在线视频免费观看 | 国产高清在线 |