如何使用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

回到顶部