isBridge用来判断一个方法是否是桥接方法。
看代码:
package com.reflect;
import java.lang.reflect.Method;
import junit.framework.TestCase;
public class TestBridgeMethod extends TestCase {
public void testBridgeA() {
class Father {
public void test() {
}
}
class Son extends Father {
public void test() {
}
}
Method[] methods = Son.class.getDeclaredMethods();
for (Method method : methods) {
System.out.println(method.toString() + ", " + method.isBridge());
}
}
public void testBridgeB() {
class Father<T> {
public void test(T t) {
}
}
class Son<T> extends Father<T> {
public void test(T t) {
}
}
Method[] methods = Son.class.getDeclaredMethods();
for (Method method : methods) {
System.out.println(method.toString() + ", " + method.isBridge());
}
}
public void testBridgeC() {
class Father<T> {
public void test(T t) {
}
}
class Son extends Father<String> {
public void test(String s) {
}
}
Method[] methods = Son.class.getDeclaredMethods();
for (Method method : methods) {
System.out.println(method.toString() + ", " + method.isBridge());
}
}
}
运行testBridgeA,输出:
public void com.reflect.TestBridgeMethod$1Son.test(), false
运行testBridgeB,输出:
public void com.reflect.TestBridgeMethod$2Son.test(java.lang.Object), false
运行testBridgeC,输出:
public void com.reflect.TestBridgeMethod$3Son.test(java.lang.String), false
public void com.reflect.TestBridgeMethod$3Son.test(java.lang.Object), true
当父类是泛型,而子类不是泛型时,如果子类重写了父类的方法,那么子类实际上会有两个同名的方法,参数为Object的方法则是桥接方法。