Java反射错误:NoSuchMethodException

时间:2018-08-13 14:45:18

标签: java reflection

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

我在课堂上得到了以下代码:

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

应将散列的字符串存储到变量hash中的这段代码在运行时引发以下错误:

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

除了不了解导致此错误的原因是什么,我还不明白为什么我需要通过该方法将返回值强制转换为String,因为API指出它返回了一个字符串(应该不使用类型安全性)在这种情况下,而不是由Eclipse强制执行?)。

1 个答案:

答案 0 :(得分:3)

您应该在@Scheduled(cron = "0 5 0 ? * MON") private void doTask(){ if(LocalDate.now().getDayOfMonth() != 1){ //your code here } } 中添加一个参数类型作为第二个参数。并且您应该传递一些东西(更好的getDeclaredMethod)作为第一个参数来调用静态方法。

null

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

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