前言
標題可能會讓人一頭霧水,直接上例子
如果我們在程式碼中,執行如下內容
server instanceof MvpServer
它返回的東西會是啥,如果得出正確答案的朋友,下面內容就可以不用看了。
答案是
當時看到這個答案,我真的一臉懵逼,還一度懷疑是我idea問題
排查
像這種問題,有時候真的得靠平時的積累了,類是由什麼進行載入?答案是類載入器,即使類包名一樣,類名字一樣,如果你是由不同的類載入器進行載入,則該類也是不一樣。因此我們就可以優先從類載入器排查起
從圖片就很容易看出來,server和MvpServer的類載入器不一樣。server他這個類載入器是spring devtools這個包提供的。因此解決的思路就很簡單,就查下專案中是否引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
有的話,可以直接去掉了,避免對專案產生影響。如果你確實不想去掉,你可以把當前整個執行緒的類載入器,都設定成spring-boot-devtools的類載入器,可以通過
Thread.currentThread().setContextClassLoader();
當我們把類載入都改成一樣後,我們再來看下效果
總結
可能我們平時會背一些八股文,類載入器比如boostrap classloader、ext classloader、app classloader啥的,但有時候真的排查起問題,就會忽略了