gpt4 book ai didi

Java反射错误: NoSuchMethodException

转载 作者:行者123 更新时间:2023-12-01 19:49:55 27 4
gpt4 key购买 nike

我刚刚读到有关反射的内容并决定尝试一下,但我似乎遇到了一个错误,我找不到原因。

我在一个类中得到了以下代码:

String hashType = "md5";
Method method = DigestUtils.class.getDeclaredMethod(hashType + "Hex");
String hash = (String) method.invoke("hello");

这段代码应该将散列字符串存储到变量散列中,但在运行时抛出以下错误:

java.lang.NoSuchMethodException: org.apache.commons.codec.digest.DigestUtils.md5Hex()
at java.lang.Class.getDeclaredMethod(Unknown Source)
at stringHasher.stringHasher.hashString(stringHasher.java:37)

根据 API 文档,该方法确实存在:https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/digest/DigestUtils.html

除了不明白这个错误的原因是什么之外,我也不明白为什么我需要将该方法的返回值转换为字符串,因为 API 声明它返回一个字符串(类型安全不应该掌握在手中)在这种情况下,程序员的责任而不是由 Eclipse 强制执行?)。

最佳答案

您应该在 getDeclaredMethod 中添加参数类型作为第二个参数。并且您应该传递一些内容(更好的 null)作为第一个参数来调用静态方法。

String hashType = "md5";
Method method = DigestUtils.class.getDeclaredMethod(hashType + "Hex", String.class);
String hash = (String) method.invoke(null, "hello");

对于非静态方法,您可以这样做:

DigestUtils instance = new DigestUtils();
String hash = (String) method.invoke(instance, "hello");

关于Java反射错误: NoSuchMethodException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51825004/

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