无法通过反射调用带有 varargs 参数的方法 - NoSuchMethodException

2023-12-04

我正在尝试使用反射来调用带有可变参数的方法。

并抓住了NoSuchMethodException。我不明白这里出了什么问题。

Code:

public class ReflectionTest {

    public ReflectionTest() {   }

    private void varargMethod(String string, Integer ... var) {

        System.out.println("vargarMethod() called");
        System.out.println(string + " Number of args: " + var.length
                + "\nContents");

        for (int i = 0; i < var.length; i++) {
            System.out.printf(" args %d: %d", i, var[i]);
            //System.out.println(" args " + i + ": " + var[i]);
        }

        System.out.println();
    }

    public static void main(String[] args) throws Exception {

        Class[] parameterTypes = new Class[] { String.class, int.class, int.class, int.class };

        //System.out.println(Arrays.toString(parameterTypes));

        Method varMeth = test.getClass().getDeclaredMethod("varargMethod", parameterTypes);
        System.out.println("varMeth" + varMeth);

        Object[] arguments = new Object[] { new String("my perfect string"),
                new Integer(10), new Integer(100), new Integer(47) };

        varMeth.invoke(test, arguments);

它准确地抛出:

java.lang.NoSuchMethodException: ReflectionTest.varargMethod(java.lang.String, int, int, int)

  • 如何解决这个烦恼呢?

参数类型应该是Integer[].class对于 varargs as varargs 表达式指定参数是可变数组参数。所以正确的做法是:

Class[] parameterTypes = new Class[] { String.class, Integer[].class };

//System.out.println(Arrays.toString(parameterTypes));
ReflectionTest test = new ReflectionTest();
Method varMeth = test.getClass().getDeclaredMethod("varargMethod", 
                                                      parameterTypes);
System.out.println("varMeth" + varMeth);

Object[] arguments = new Object[] { new String("my perfect string"),
                                    new Integer[]{10, 100, 47}
                                  };

varMeth.invoke(test, arguments);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法通过反射调用带有 varargs 参数的方法 - NoSuchMethodException 的相关文章

随机推荐

  • 如何计算体素大小?

    提供了 DICOM 标头中的以下信息 如何计算体素大小的第三个值 我假设前两个值为 0 515625 和 0 515625 BitsAllocated 16 BitsStored 12 Columns 512 HighBit 11 Imag
  • 为什么 scanf 在提供 double 时返回 0.000000?

    我有以下汇编代码 为 Linux 上的 NASM 编写 This code has been generated by the 7Basic compiler
  • Python - 将日期时间参数传递到 SQL 命令中

    我正在尝试用Python做这样的事情 SQLCommand Delete From s where Date gt s and Date lt s calendar table name required starting date req
  • 使用 ruby​​ 和 active_record 保存时出现弃用警告

    我是 ruby 新手 正在编写一个需要将消息写入数据库日志的小脚本 我使用 ruby 1 9 3 和 active record 但没有 Rails 所有选择语句都工作正常 但我的写入日志函数返回以下错误 DEPRECATION WARNI
  • Python - 时间数据与格式不匹配

    我有以下格式的字符串时间 2016 12 10T13 54 15 294 我使用以下方法来格式化时间 time strptime ts b d H M S Y 这会引发错误 time data did not match format da
  • 使用 shell 变量查找具有多个文件名的 -name

    我有一个find命令查找名称与提到的多个模式匹配的文件 name范围 find L name SystemOut log o name out o name log o name javacore 这可以在命令行成功找到所需的文件 我正在寻
  • 如何管理 DOM 元素

    我已经实现了无限滚动 即当滚动条到达 div 底部时加载记录 它工作正常 但在页面上加载太多记录后 页面变得太重并导致渲染缓慢 实际上 我正在使用这种技术来替代 gridview 那么在这种情况下我如何管理繁重的 DOM 将 DOM 元素减
  • 使用带有 execve 的新路径来运行 ls 命令

    我正在尝试使用 execve 运行 ls 命令 目前我正在使用以下参数运行它 execve args 0 args env args args looks like ls l a NULL env args looks like PATH
  • 检查文件是否已保存到磁盘?

    我正在从服务器下载文件 将它们保存到设备 然后在我的应用程序中向用户显示它们 我想执行检查以查看该文件是否已存在于设备上 以便我们可以跳过下载并仅显示 但我无法找出执行此操作的最佳方法 我为每个文件创建一个唯一的文件名 然后将其转换为 NS
  • 如何使用 DataTable.Select() 解决文件管理器值中的单引号问题

    假设我想要productCode下面的变量被分配名为产品的产品代码Cookie s 注意其中的 ProductName因为它是导致下面的语句失败的原因 基本上 过滤表达式中的 会导致错误的 SQL 语法 我将不胜感激你们的任何想法 Data
  • 如何在 Zend Framework 2 中将数据库适配器设置为 Validator RecordExists

    我正在尝试将验证器 RecordExists 添加到我的表单中 但收到错误 不存在数据库适配器 如何将数据库适配器设置为此验证器 我使用骨架应用程序中的示例 我正在尝试执行类似的操作 是的 我知道 dbAdapter 未定义 我正在搜索如何
  • 无法手动将签名的 apk 安装到设备,出现错误“应用程序未安装”

    我想将我的应用程序发布到 GooglePlay 但首先我想使用签名的 apk 进行最后一次测试 以确保所有使用的 API 密钥都能在发布版本 GMaps Facebook 等 中正常工作 所以我只是使用我们的发布密钥制作了我的应用程序的签名
  • 获取全球ip地址

    我怎样才能得到 在C 中 global我的电脑的IP地址 Windows XP 你不能 您可以确定各个接口上的 IP 地址 并且可能有多个 这些可能是局域网 IP 10 0 0 0 8 192 168 0 0 16 等 也可能是 Inter
  • 如何使用 FFmpeg hstack 过滤器合成 2 个视频?

    我想通过并排将 2 个视频合成为 1 个视频 我还希望为每个视频设置开始 停止时间 最终视频应为 H264 AAC 编解码器和 mp4 格式 我附上了示例视频 https www dropbox com s e5eouyrrqsy44ts
  • iPhone X 中的导航栏问题? [复制]

    这个问题在这里已经有答案了 当我在 iPhone X 中运行该项目时 导航栏上方出现黑色空间 如图所示 但颜色没有相同 怎么解决这个问题呢 我想您没有使用故事板作为启动屏幕 有两个选项可以解决此问题 使用故事板作为启动屏幕 如果您使用启动图
  • 如何更新 Bitnami 堆栈中的 GitLab

    我在尝试BitNami GitLab 堆栈5 1 0 2 当我这样做的时候5 1 0 3被释放了 如何更新 Bitnami 堆栈中的 GitLab 相关带 LDAP 的 BitNami GitLab Stack 5 1 0 2 看这个 ht
  • 当我复制 laravel 项目并显示最后一个视图时出错

    我有一个 Laravel 5 3 项目 它是 5 个月前创建的 今天我复制了该项目 并对代码做了一些更改 当我编辑 Blade php 文件中的视图时 我编辑的项目向我显示了最后一个项目视图 我在新的 Laravel 项目中创建了一条新路线
  • 单击工具栏上的汉堡包图标不会打开导航抽屉

    我有这个导航抽屉工作得很好 重构我的代码我删除了所有onOptionsItemSelecteds在活动中并使所有活动继承自扩展的基本活动AppComplatActivity and 实施所有必要的方法 在此之后 即使我有 单击汉堡包图标也不
  • WPF DataGrid - 我可以使用属性装饰 POCO 以获得自定义列名称吗?

    我在 WPF 中有一个 DataGrid 并用如下数据填充它 public enum Sharing Equal SurfaceBased public class Data public bool Active get set publi
  • 无法通过反射调用带有 varargs 参数的方法 - NoSuchMethodException

    我正在尝试使用反射来调用带有可变参数的方法 并抓住了NoSuchMethodException 我不明白这里出了什么问题 Code public class ReflectionTest public ReflectionTest priv