当前位置: 首页 > 面试题库 >

使用Java反射创建eval()方法

燕航
2023-03-14
问题内容

我有一个关于反射的问题,我正在尝试使用某种eval()方法。所以我可以打电话给:

eval("test('woohoo')");

现在,我了解到java中没有eval方法,但存在反射。我做了以下代码:

String s = "test";
Class cl = Class.forName("Main");
Method method = cl.getMethod(s, String.class);
method.invoke(null, "woohoo");

这非常有效(当然,此代码周围有一个try,catch块)。它运行测试方法。但是,我想调用多个都有不同参数的方法。

我不知道这些是什么参数(不仅是String.class)。但这怎么可能呢?如何获得方法的参数类型?我知道以下方法:

Class[] parameterTypes = method.getParameterTypes();

但这将返回我刚刚选择的方法的parameterTypes!带有以下语句:

Method method = cl.getMethod(s, String.class);

任何帮助,将不胜感激 !


问题答案:

您将需要调用Class.getMethods()并遍历它们以寻找正确的功能。

For (Method method : clazz.getMethods()) {
  if (method.getName().equals("...")) {
    ...
  }
}

这样做的原因是,可能有多个具有相同名称和不同参数类型的方法(即,方法名称已重载)。

getMethods()返回类中的所有公共方法,包括那些超类中的方法。另一种方法是Class.getDeclaredMethods(),它返回在类的所有方法



 类似资料:
  • 问题内容: 给定班级价值: 我正在尝试使用创建该类的新实例: 从主要: 这不起作用,Eclipse的输出: 如果是这样,怎么可以用我创建了一个新的价值目标,在那里我调用的? 谢谢 问题答案: 您需要为此找到确切的构造函数。只能用于调用null构造函数。所以写

  • 本文向大家介绍JS使用eval()动态创建变量的方法,包括了JS使用eval()动态创建变量的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS使用eval()动态创建变量的方法。分享给大家供大家参考,具体如下: 一、什么是eval()函数? eval_r()函数可计算某个字符串,并执行其中的的 JavaScript 代码。 二、如何动态定义变量? 既然eval()能够计算字符串,何

  • 问题内容: 我需要使用反射调用类的setter方法,并且代码如下: 的是一个以及设置器方法如下: 运行此代码时,将引发A ,但是将setter方法参数类型更改为from时,将执行正常。有没有一种方法可以将setter方法的参数保持为超级类型,并且在从类中获取方法时仍无需手动指定参数的类型即可使用反射? 问题答案: 与其他答案相反,有一个非常简单的解决方案。请参阅。它为您提供了一种执行任意反射代码的

  • 问题内容: 我想调用静态的方法。我得到了类型的对象,但是我无法创建该类的实例,也无法调用该方法。 问题答案: 如果方法是私有使用而不是。并调用方法对象。

  • 问题内容: 我有一个名为choiceDialog(String s,int i)的静态方法,在该方法中,我想根据提供给choiceDialog的参数在同一类(Dialogs.class)中调用另一个方法。s是所需方法的名称,而i是单个参数。 我已经尝试了许多教程,并花了几个小时阅读有关该主题的内容,但是我似乎无法确切地知道我需要做什么。 有任何想法吗? 谢谢! 问题答案: 为什么要使用在Strin