java 方法泛型入?yún)和String的重載關(guān)系詳解
方法泛型入?yún)和String的重載關(guān)系
重載的基本知識不在這里討論了
重載的一個關(guān)鍵理論,如果方法名相同,參數(shù)個數(shù)、父類型、位置也相同,則調(diào)用更加特殊化一個方法。
多余的沒寫,大家可以運行一下下面的代碼,然后理解一下就ok了。
public class TestMain {? ?? ?public static void main(String[] args) { ?? ??? ?TestMain t = new TestMain(); ?? ??? ?t.func("message"); ?? ??? ?t.func(new String("message")); ?? ??? ?t.func(new Object()); ?? ?} ? ?? ?protected <T> void func(T data) { ?? ??? ?System.out.println("fun1" + data); ?? ?} ? ?? ?protected void func(String data) { ?? ??? ?System.out.println("fun2" + data); ?? ?}? }
由于string和T相比較,帶有String data入?yún)⒌姆椒ǜ犹厥饣?,所以當傳入String參數(shù)的時候,會調(diào)用第2個func。
網(wǎng)上還有關(guān)于null入?yún)⒌挠懻?,我理解是由于null入?yún)蓚€方法都可以,所以會選擇更加特殊化的方法,也就是第二個func。
這里可以試一下,定義一個Object入?yún)⒌姆椒ǎ幾g器會直接說與T data入?yún)⒌姆椒ㄆ缌x。
(T是一個泛型,沒有具體說明類型,這里類似于Object類型)
重載遇到泛型的問題
今天被問到一個有意思的問題,大家都知道重載的概念吧:一個類中定義同名的方法,參數(shù)表不同(參數(shù)類型,或者參數(shù)個數(shù)不通);
但是,如果是下面這個兩個方法呢
public static int fn(List<Integer> index) {? ? ?return 1;? }? public static String ?fn(List<String> str) {?? ? ? ?return "str";? }?
同名的兩個方法,參數(shù)表中用到了集合,參數(shù)表里的泛型不一樣,那么到底這樣能不能編譯通過呢?
反復(fù)求證,得出以下結(jié)論
使用Sun JDK的Javac來進行編譯會通過,而其他編譯器可能會拒絕編譯這段代碼
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
實例解析Json反序列化之ObjectMapper(自定義實現(xiàn)反序列化方法)
這篇文章主要介紹了實例解析Json反序列化之ObjectMapper,json自定義序列化的方法,需要的朋友可以了解下。2017-09-09SpringBoot在啟動類main方法中調(diào)用service層方法報“空指針異常“的解決辦法
這篇文章主要介紹了SpringBoot在啟動類main方法中調(diào)用service層方法報“空指針異?!暗慕鉀Q辦法,大多數(shù)情況下,我們使用Springboot是創(chuàng)建一個maven項目,然后通過controller層的接口調(diào)用,但也有特殊情況,文章介紹的非常詳細,需要的朋友可以參考下2024-06-06java處理數(shù)據(jù)庫不支持的emoji表情符問題解決
這篇文章主要介紹了java處理數(shù)據(jù)庫不支持的emoji表情符問題解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09