我们可以通过Method类的isBridge方法来判断一个方法是否是桥接方法。在字节码文件中,桥接方法会被标记为ACC_BRIDGE和ACC_SYNTHETIC,其中ACC_BRIDGE用于表示该方法是由编译器产生的桥接方法,ACC_SYNTHETIC用于表示该方法是由编译器自动生成。最常见的两种情况就是协变返回值类型和类型擦除,因为它们导致了父类方法的参数和实际调用的方法参数类型不一致。下面我们通过两个例子更好地理解一下。在Java 1.5添加了对协变返回类型的支持,即子类重写父类方法时,返回的类型可以是子类方法返回类型的子类。下面看一个例子:Child类重写其父类Parent的get方法,Parent的get方法返回类型为Number,而Child类中get方法返回类型为Integer。将这段代码进行编译,再反编译:结果如下:

3分钟快速搞懂Java的桥接方法示例

3分钟快速搞懂Java的桥接方法示例

3分钟快速搞懂Java的桥接方法示例

3分钟快速搞懂Java的桥接方法示例

3分钟快速搞懂Java的桥接方法示例