如何使用Java反射调用超类方法
我有两节课:
public class A { public Object method() {...}
}
public class B extends A {
@Override
public Object method() {...}
}
我有一个实例B。如何调用A.method()从b?基本上,效果与super.method()从调用相同B。
B b = new B();Class<?> superclass = b.getClass().getSuperclass();
Method method = superclass.getMethod("method", ArrayUtils.EMPTY_CLASS_ARRAY);
Object value = method.invoke(obj, ArrayUtils.EMPTY_OBJECT_ARRAY);
但是上述代码仍会调用B.method()
。
回答:
如果使用的是JDK7,则可以使用MethodHandle实现此目的:
public class Test extends Base { public static void main(String[] args) throws Throwable {
MethodHandle h1 = MethodHandles.lookup().findSpecial(Base.class, "toString",
MethodType.methodType(String.class),
Test.class);
MethodHandle h2 = MethodHandles.lookup().findSpecial(Object.class, "toString",
MethodType.methodType(String.class),
Test.class);
System.out.println(h1.invoke(new Test())); // outputs Base
System.out.println(h2.invoke(new Test())); // outputs Base
}
@Override
public String toString() {
return "Test";
}
}
class Base {
@Override
public String toString() {
return "Base";
}
}
以上是 如何使用Java反射调用超类方法 的全部内容, 来源链接: utcz.com/qa/415605.html