java 泛型中的橋方法

2021-08-22 01:15:34 字數 1642 閱讀 7028

bridge method :

這個方法存在的意義?或者這個方法用來解決什麼問題呢?

解決泛型遇到多型,jvm使用橋方法解決。

舉例,泛型遇到多型。

如下面的兩段**:

publicclasspair

publicpair(t first, t second)

publict getfirst()

publict getsecond()

publicvoidsetfirst(t newvalue)

publicvoidsetsecond(t newvalue)

}

classdateintervalextendspair

}

由於型別擦除的原因,dateinterval存在兩個setsecond方法,分別為:

public void setsecond(date second)      //自身建立

public void setsecond(object second)    //繼承自pair

考慮以下呼叫:

dateinterval interval = new dateinterval(...);

pairpair = interval;

pair.setsecond(adate);

出現問題:由於多型性,pair理論上應該呼叫dateinterval.setsecond方法。但是根據上面的分析,dateinterval類存在兩個setsecond方法,到底該如何呼叫呢?

jvm遇到 :

dateinterval interval = new dateinterval(...);

pair

pair = interval;

1.  正常思維是jvm最終呼叫 setsecond(date) 這個方法,也就是 dateinterval 的方法。

2   實際上,jvm 會用 pair 引用的物件去呼叫這個setsecond(object)方法。那 dateinterval 的方法呢?

3.  jvm通過 pair 的方法再間接呼叫 dateinterval  的方法(這就是jvm對泛型遇到多型的核心處理方式)

4.  pair的方法相當於 「橋梁的作用 」,它的內容就是呼叫 dateinterval 的方法

public void setsecond(object second)

這個方法叫做 橋方法。

另外呢,jvm可以通過返回型別 來區分多型方法。

泛型中的橋接方法

宣告乙個抽象類 public abstract t selectbyprimarykey t t 再宣告其子類 override public user selectbyprimarykey user user 單純獲取子類中宣告的方法,會發現子類竟然有兩個方法 system.out.println...

Java中的泛型方法

泛型類,是在例項化類的時候指明泛型的具體型別 泛型方法,是在呼叫方法的時候指明泛型的具體型別 定義泛型方法語法格式如下 呼叫泛型方法語法格式如下 說明一下,定義泛型方法時,必須在返回值前邊加乙個,來宣告這是乙個泛型方法,持有乙個泛型t,然後才可以用泛型t作為方法的返回值。class的作用就是指明泛型...

JAVA 泛型類和泛型方法(靜態方法泛型)

泛型類定義的泛型,在整個類中有效。如果被方法是用,那麼 泛型類的物件明確要操作的具體型別後,所有要操作的型別就已經固定了。為了讓不同的方法可以操作不同型別,而且型別還不確定。那麼 可以將泛型定義在方法上。泛型類class demo public void print t t class generi...