如何借助反射 API 从 Java 中的另一个类调用私有方法?
原文:https://www . geesforgeks . org/如何借助反射 api 从另一个 java 类调用私有方法/
我们可以在 Java 中从另一个类调用一个类的私有方法(在 Java 中使用私有访问修饰符来定义)。
我们可以通过使用 Java 的一些预定义方法来改变类的运行时行为。对于访问不同类的私有方法,我们将使用反射 API 。
要调用私有方法,我们将使用以下方法 Java.lang.class 和 Java.lang.reflect.Method
- 方法[] getDeclaredMethods() :此方法返回一个 Method 对象,该对象反映了此 class 对象表示的类或接口的指定声明方法。
- 设置可访问():将该对象的可访问标志设置为指示的布尔值。值为 true 表示反射对象在使用时应该禁止 Java 语言访问检查。值为 false 表示反射的对象应该强制执行 Java 语言访问检查。
-
invoke() :它用指定的参数在指定的对象上调用这个 method 对象表示的底层方法。
下面的程序演示了 Java 中私有方法的调用:
-
例 1: 当私有函数的名字已经知道时。
```java // Java program to call // private method of a // class from another class
import Java.lang.reflect.Method;
// The class containing // a private method and // a public method class Check {
// Private method private void private_Method() { System.out.println("Private Method " + "called from outside"); }
// Public method public void printData() { System.out.println("Public Method"); } }
// Driver code class GFG {
public static void main(String[] args) throws Exception { Check c = new Check();
// Using getDeclareMethod() method Method m = Check.class .getDeclaredMethod("private_Method");
// Using setAccessible() method m.setAccessible(true);
// Using invoke() method m.invoke(c); } } ```
```java // Java program to call private method // of a class from another class
import Java.lang.reflect.Method;
// The class contains a private method class Check {
// Private method private void Demo_private_Method() { System.out.println("Private Method " + "called from outside"); }
// Public method public void printData() { System.out.println("Public Method"); } }
// Driver code class GFG {
public static void main(String[] args) throws Exception { Check c = new Check(); Method m;
// Using getDeclareMethod() method Method method[] = Check.class.getDeclaredMethods();
for (int i = 0; i < method.length; i++) { String meth = new String(method[i].toString()); if (meth.startsWith("private")) {
String s = method[i].toString();
int a = s.indexOf("."); int b = s.indexOf("(");
// Method name retrieved String method_name = s.substring(a + 1, b);
// Print method name System.out.println("Method Name = " + method_name);
// Using getDeclareMethod() method m = Check.class.getDeclaredMethod(method_name);
// Using setAccessible() method m.setAccessible(true);
// Using invoke() method m.invoke(c); } } } } ```
-
版权属于:月萌API www.moonapi.com,转载请注明出处