📅  最后修改于: 2023-12-03 14:52:54.383000             🧑  作者: Mango
在 Java 中,可以使用反射 API 来访问类的私有成员,包括私有方法。下面是一些示例代码,演示了如何使用反射 API 从 Java 中的另一个类调用私有方法。
首先,我们定义一个类 MyClass
,包含一个私有方法 privateMethod()
。
public class MyClass {
private void privateMethod() {
System.out.println("This is a private method.");
}
}
接下来,我们创建一个类 InvokePrivateMethod
,其中包含一个方法 invokePrivateMethod()
,使用反射 API 调用 MyClass
的私有方法 privateMethod()
。
import java.lang.reflect.Method;
public class InvokePrivateMethod {
public void invokePrivateMethod(MyClass obj) throws Exception {
Method privateMethod = MyClass.class.getDeclaredMethod("privateMethod");
privateMethod.setAccessible(true);
privateMethod.invoke(obj);
}
}
最后,我们在主方法中创建一个 MyClass
的实例并调用 InvokePrivateMethod
类中的 invokePrivateMethod()
方法,从而间接地调用 MyClass
的私有方法。
public static void main(String[] args) throws Exception {
MyClass obj = new MyClass();
InvokePrivateMethod invoker = new InvokePrivateMethod();
invoker.invokePrivateMethod(obj);
}
使用反射 API 访问私有方法需要使用 Class.getDeclaredMethod()
方法,该方法允许您获取类的私有方法。在这个例子中,我们使用该方法获取 MyClass
类的 privateMethod()
方法:
Method privateMethod = MyClass.class.getDeclaredMethod("privateMethod");
在 Java 中,私有方法默认是不可访问的。因此,在调用访问类的私有方法之前,我们需要使用 Method.setAccessible()
方法将该方法设置为可访问:
privateMethod.setAccessible(true);
一旦私有方法已经设置为可访问,我们就可以使用 Method.invoke()
方法调用它:
privateMethod.invoke(obj);
该方法接受一个对象作为参数,该对象是私有方法在其中执行的对象。在这个例子中,我们使用 MyClass
的实例作为参数。
首先,我们定义一个类 MyClass
,包含一个私有方法 privateMethod()
。
public class MyClass {
private void privateMethod() {
System.out.println("This is a private method.");
}
}
接下来,我们创建一个类 InvokePrivateMethod
,其中包含一个方法 invokePrivateMethod()
,使用反射 API 调用 MyClass
的私有方法 privateMethod()
。
import java.lang.reflect.Method;
public class InvokePrivateMethod {
public void invokePrivateMethod(MyClass obj) throws Exception {
Method privateMethod = MyClass.class.getDeclaredMethod("privateMethod");
privateMethod.setAccessible(true);
privateMethod.invoke(obj);
}
}
最后,我们在主方法中创建一个 MyClass
的实例并调用 InvokePrivateMethod
类中的 invokePrivateMethod()
方法,从而间接地调用 MyClass
的私有方法。
public static void main(String[] args) throws Exception {
MyClass obj = new MyClass();
InvokePrivateMethod invoker = new InvokePrivateMethod();
invoker.invokePrivateMethod(obj);
}
使用反射 API 访问私有方法需要使用 Class.getDeclaredMethod()
方法,该方法允许您获取类的私有方法。在这个例子中,我们使用该方法获取 MyClass
类的 privateMethod()
方法:
Method privateMethod = MyClass.class.getDeclaredMethod("privateMethod");
在 Java 中,私有方法默认是不可访问的。因此,在调用访问类的私有方法之前,我们需要使用 Method.setAccessible()
方法将该方法设置为可访问:
privateMethod.setAccessible(true);
一旦私有方法已经设置为可访问,我们就可以使用 Method.invoke()
方法调用它:
privateMethod.invoke(obj);
该方法接受一个对象作为参数,该对象是私有方法在其中执行的对象。在这个例子中,我们使用 MyClass
的实例作为参数。