问题遇到的现象和发生背景
网上说 getDeclaredMethods()
方法只能获取到本类中的方法,无法获取到父类中的方法。但是如果被继承的类不加任何访问修饰符(也就是default)的话不知道为什么也能获取到父类中的方法
问题相关代码
// BaseClass.java
class BaseClass<T> {
public String getTest(){
return "one";
}
public String getTest2(T t){
return "two";
}
public String getTest3(T t){
return "three";
}
}
// OverrideClass.java
public class OverrideClass extends BaseClass<Test>{
}
// Test.java
public class Test {
public static void main(String[] args) {
Class<OverrideClass> overrideClass = OverrideClass.class;
Method[] declaredMethods = overrideClass.getDeclaredMethods();
System.out.println(Arrays.toString(declaredMethods));
}
}
运行结果及报错内容
[public java.lang.String OverrideClass.getTest()]
我的解答思路和尝试过的方法
我猜测是OverrideClass 类中生成了getTest的桥接方法,因为我在OverrideClass的字节码中看到了这个
// access flags 0x1041
public synthetic bridge getTest()Ljava/lang/String;
L0
LINENUMBER 1 L0
ALOAD 0
INVOKESPECIAL BaseClass.getTest ()Ljava/lang/String;
ARETURN
L1
LOCALVARIABLE this LOverrideClass; L0 L1 0
MAXSTACK = 1
MAXLOCALS = 1
}
但是令我疑惑的是为什么getTest2和getTest3没有生成相应的桥接方法?是因为泛型的原因吗?