Java 反思:调用子 class 继承的方法
Java Reflection : invoking inherited methods from child class
在我的应用程序中,我有以下结构:
public class ParentClass{
public void method1()
{....}
public void method2()
{....}
public void method3()
{....}
public void method4()
{....}
public void method5()
{....}
}
public class ChildClass extends ParentClass{
public void method3()
{....}
public void method4()
{....}
}
//I have exported the above class in a jar file.
//--------------------XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX---------------------------
public class TestClass{
public static void main(String args[]) {
String jarpath = "jar path of the above class"
File jarFile = new File(jarpath);
URLClassLoader classLoader = new URLClassLoader(new URL[]{jarFile.toURI().toURL()},Thread.currentThread().getContextClassLoader());
Class<?> dynamicClass = (Class<?>) classLoader.loadClass("packageName.ChildClass");
Constructor<?> cons = dynamicClass.getConstructor();
classObject = cons.newInstance();
Method method = obj2.getClass().getDeclaredMethod("method1",null);
method.invoke(obj2);
}
}
在上面的调用中,当我从 ChildClass
的对象调用 method1
时,它抛出 java.lang.NoSuchMethodException
。
在实际场景中 ParentClass
有数百种方法像主存储库一样工作,我们为每个客户端创建单独的 ChildClass 并覆盖客户端特定更改的方法。
有什么方法可以从子 class 对象调用父 class 的方法(未被覆盖)?
您需要使用 getMethod(String name, Class<?>... parameterTypes)
而不是 getDeclaredMethod
如果继承的函数是private
,可以使用:
clazz.getSuperclass().getDeclaredMethod(String name, Class<?>... parameterTypes);
在我的应用程序中,我有以下结构:
public class ParentClass{
public void method1()
{....}
public void method2()
{....}
public void method3()
{....}
public void method4()
{....}
public void method5()
{....}
}
public class ChildClass extends ParentClass{
public void method3()
{....}
public void method4()
{....}
}
//I have exported the above class in a jar file.
//--------------------XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX---------------------------
public class TestClass{
public static void main(String args[]) {
String jarpath = "jar path of the above class"
File jarFile = new File(jarpath);
URLClassLoader classLoader = new URLClassLoader(new URL[]{jarFile.toURI().toURL()},Thread.currentThread().getContextClassLoader());
Class<?> dynamicClass = (Class<?>) classLoader.loadClass("packageName.ChildClass");
Constructor<?> cons = dynamicClass.getConstructor();
classObject = cons.newInstance();
Method method = obj2.getClass().getDeclaredMethod("method1",null);
method.invoke(obj2);
}
}
在上面的调用中,当我从 ChildClass
的对象调用 method1
时,它抛出 java.lang.NoSuchMethodException
。
在实际场景中 ParentClass
有数百种方法像主存储库一样工作,我们为每个客户端创建单独的 ChildClass 并覆盖客户端特定更改的方法。
有什么方法可以从子 class 对象调用父 class 的方法(未被覆盖)?
您需要使用 getMethod(String name, Class<?>... parameterTypes)
而不是 getDeclaredMethod
如果继承的函数是private
,可以使用:
clazz.getSuperclass().getDeclaredMethod(String name, Class<?>... parameterTypes);