在Java中,橋接方法(bridge method)是由編譯器自動生成的一種方法,用于解決泛型類型擦除后的多態調用問題。橋接方法存在于編譯后的字節碼中,對于開發者來說是透明的。當一個泛型類繼承另一個泛型類或實現一個泛型接口,并且子類中定義了與父類或接口中相同的方法簽名時,編譯器會生成一個橋接方法來確保正確的多態行為。
以下是一個簡單的例子來說明橋接方法的工作原理:
public class Parent<T> {
public void method(T t) {
System.out.println("Parent method: " + t);
}
}
public class Child extends Parent<String> {
public void method(String s) {
System.out.println("Child method: " + s);
}
}
在這個例子中,Child
類繼承了 Parent
類,并重寫了 method
方法。由于 Parent
類是一個泛型類,而 Child
類指定了泛型參數為 String
,所以在 Child
類中定義了一個與 Parent
類中相同方法簽名的新方法。為了解決這個問題,編譯器會自動生成一個橋接方法,如下所示:
public void method(Object s) {
method((String) s);
}
這個橋接方法將 Parent
類中的 method(T t)
方法與 Child
類中的 method(String s)
方法連接起來。當我們在 Child
類上調用 method
方法時,編譯器會根據實際參數類型選擇相應的方法實現。如果傳遞的是 String
類型,將調用 Child
類中的 method(String s)
方法;如果傳遞的是其他類型,將調用 Parent
類中的 method(T t)
方法。
需要注意的是,橋接方法只會在編譯時生成,運行時不會顯示存在。它們是編譯器為了確保類型安全和正確的多態行為而自動處理的。