我刚刚阅读了有关反射的内容,并决定尝试一下,但是似乎遇到了找不到原因的错误。
我在课堂上得到了以下代码:
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强制执行?)。
答案 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");