java 方法泛型入?yún)和String的重載關(guān)系詳解
方法泛型入?yún)和String的重載關(guān)系
重載的基本知識(shí)不在這里討論了
重載的一個(gè)關(guān)鍵理論,如果方法名相同,參數(shù)個(gè)數(shù)、父類型、位置也相同,則調(diào)用更加特殊化一個(gè)方法。
多余的沒寫,大家可以運(yùn)行一下下面的代碼,然后理解一下就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)⒌姆椒ǜ犹厥饣援?dāng)傳入String參數(shù)的時(shí)候,會(huì)調(diào)用第2個(gè)func。
網(wǎng)上還有關(guān)于null入?yún)⒌挠懻?,我理解是由于null入?yún)蓚€(gè)方法都可以,所以會(huì)選擇更加特殊化的方法,也就是第二個(gè)func。
這里可以試一下,定義一個(gè)Object入?yún)⒌姆椒?,編譯器會(huì)直接說與T data入?yún)⒌姆椒ㄆ缌x。
(T是一個(gè)泛型,沒有具體說明類型,這里類似于Object類型)
重載遇到泛型的問題
今天被問到一個(gè)有意思的問題,大家都知道重載的概念吧:一個(gè)類中定義同名的方法,參數(shù)表不同(參數(shù)類型,或者參數(shù)個(gè)數(shù)不通);
但是,如果是下面這個(gè)兩個(gè)方法呢
public static int fn(List<Integer> index) {?
? ?return 1;?
}?
public static String ?fn(List<String> str) {?? ?
? ?return "str";?
}?同名的兩個(gè)方法,參數(shù)表中用到了集合,參數(shù)表里的泛型不一樣,那么到底這樣能不能編譯通過呢?
反復(fù)求證,得出以下結(jié)論
使用Sun JDK的Javac來進(jìn)行編譯會(huì)通過,而其他編譯器可能會(huì)拒絕編譯這段代碼
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
nacos注冊(cè)中心單節(jié)點(diǎn)ap架構(gòu)源碼解析(最新推薦)
這篇文章主要介紹了nacos注冊(cè)中心單節(jié)點(diǎn)ap架構(gòu)源碼解析,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-01-01
三道java新手入門面試題,通往自由的道路--鎖+Volatile
這篇文章主要為大家分享了最有價(jià)值的3道多線程面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,對(duì)hashCode方法的設(shè)計(jì)、垃圾收集的堆和代進(jìn)行剖析,感興趣的小伙伴們可以參考一下2021-07-07
深入解析System.load 與 System.loadLibrary
以下是對(duì)System.load與System.loadLibrary進(jìn)行了詳細(xì)的分析介紹。需要的朋友可以過來參考下2013-08-08
JavaWeb開發(fā)之【Tomcat 環(huán)境配置】MyEclipse+IDEA配置教程
這篇文章主要介紹了JavaWeb開發(fā)之【Tomcat 環(huán)境配置】MyEclipse+IDEA配置教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
Java基于動(dòng)態(tài)規(guī)劃法實(shí)現(xiàn)求最長(zhǎng)公共子序列及最長(zhǎng)公共子字符串示例
這篇文章主要介紹了Java基于動(dòng)態(tài)規(guī)劃法實(shí)現(xiàn)求最長(zhǎng)公共子序列及最長(zhǎng)公共子字符串,簡(jiǎn)單描述了動(dòng)態(tài)規(guī)劃法的概念、原理,并結(jié)合實(shí)例形式分析了Java使用動(dòng)態(tài)規(guī)劃法求最長(zhǎng)公共子序列以及最長(zhǎng)公共子字符串相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-08-08
SpringCloud Zuul網(wǎng)關(guān)功能實(shí)現(xiàn)解析
這篇文章主要介紹了SpringCloud Zuul網(wǎng)關(guān)功能實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
用Java實(shí)現(xiàn)一個(gè)靜態(tài)鏈表的方法步驟
這篇文章主要介紹了用Java實(shí)現(xiàn)一個(gè)靜態(tài)鏈表的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02

