gpt4 book ai didi

java - Method Reflect - 方法的调用顺序

转载 作者:行者123 更新时间:2023-12-01 08:05:19 24 4
gpt4 key购买 nike

我正在尝试学习 Method Reflect,以便可以在我的 Java 应用程序中应用。

我创建了两个 POJO 类。

Wishes.java

public class Wishes {

private String greeting;

public String getGreeting() {
this.greeting="Good Afternoon!";
return greeting;
}

public void setGreeting(String greeting) {
this.greeting = greeting;
}
}

Day.java

public class Day {

private Wishes wishes;

public Wishes getWishes() {
return wishes;
}

public void setWishes(Wishes wishes) {
this.wishes = wishes;
}
}

这就是我在主要方法中所做的事情。 DemoApp.java

public class DemoApp {
public static void main(String[] args) {
try {
Class cls=Wishes.class;
Method method1=cls.getDeclaredMethod("getGreeting");
String result1=(String) method1.invoke(cls.newInstance());
System.out.println(result1);
Class clazz=Day.class;
Method method=clazz.getDeclaredMethod("getWishes().getGreeting");
String result=(String) method.invoke(clazz.newInstance());
System.out.println(result);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
}
}

我运行该应用程序。对于第一个,我得到了准确的输出,因为它很简单。但第二次我遇到了异常(exception)。这是控制台输出和堆栈跟踪。

Good Afternoon!
java.lang.NoSuchMethodException: com.myapp.demo.Day.getWishes().getGreeting()
at java.lang.Class.getDeclaredMethod(Class.java:2004)
at com.myapp.demo.DemoApp.main(DemoApp.java:17)

如何通过 Method Reflect 使用 Day 类从 getWishes 调用 getGreeting 方法?是否可以?否则,使用方法 Reflect 来做到这一点的最佳方法是什么?

在我的应用程序中,我获取的方法名称来自一个 XML 文件。因此它可能包含单个方法或像上面这样的方法调用序列。

最佳答案

首先在日间类你应该提出愿望

private Wishes wishes = new Wishes();

其次你需要这样做:

Method method=clazz.getDeclaredMethod("getWishes");
Object result= method.invoke(clazz.newInstance());
Method method2=result.getClass().getDeclaredMethod("getGreeting");
String result2=(String) method2.invoke(cls.newInstance());
System.out.println(result2);

关于java - Method Reflect - 方法的调用顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22193980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com