【发布时间】:2019-12-08 17:35:27
【问题描述】:
假设如下情况:
interface A<T>{
default void foo(T t){
System.err.println(new Exception().getStackTrace()[0] + " " + t);
}
}
interface B<T extends SomeConcreteType> extends A<T>{
@Override
default void foo(T t){
System.err.println(new Exception().getStackTrace()[0] + " " + t);
}
}
我正在尝试使用反射从 B 的 foo 方法转到 A 的 foo 方法。 鉴于两种方法的后擦除参数类型不同,我该怎么做呢?
【问题讨论】:
-
我认为这通常是不可能的。
-
试过
class.getMethod("foo").getDeclaringClass();?来自here。 -
我不确定“两种方法的后擦除参数类型不同”。实际上(并跳过“后擦除”,这实际上没有意义),这些方法具有相同的参数类型。
-
不知道你想做什么以及为什么你认为你需要反思。
super.foo(t)怎么了? -
当你试图通过反射访问一个方法时,不管你在哪里做,表单总是一样的,即
A.class.getDeclaredMethod("foo", Object.class),不管你在B.foo里面或Hello.main。所以B.foo的擦除参数类型完全不相关。
标签: java generics reflection