我最近开始用java编程,我写了这样的代码:https://github.com/mouuff/JavaMD5cracker
代码可以工作,但我得到了这个creppy警告:
C:\Users\mou\Desktop\JavaMD5cracker-master>javac icrackmd5.java
Note: .\brute.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.听起来像是编译器发现这一行(brute.java :l 26)不安全,或者我不知道...
if (tries > (int)pows.get(lenght-1))有人能帮我一下吗?
发布于 2012-11-07 22:10:12
这是因为您在brute.java中声明了哈希表
Hashtable pows = new Hashtable();当编译器执行此行时
if (tries > (int)pows.get(lenght-1))它不知道来自pows的元素的类型。
使用泛型更改您的哈希表声明
Hashtable<Integer, Integer> pows = new Hashtable<Integer,Integer>();发布于 2012-11-07 22:05:33
只是您正在对另一个对象中的int执行强制转换操作。这是一个未经检查的操作,因为编译器无法检查pows.get(length-1)返回的内容是否真的可以转换为int。
如果你信任(我的意思是真正信任)你的代码,并且知道int的强制转换总是可以完成的,你可以让它这样做,这只是一个编译器警告。
同时,看一看Math对象。也许有一种更简单、更安全的方法来完成你想要完成的事情。
编辑
更改此设置:
Hashtable pows = new Hashtable();至:
Hashtable<Integer,Integer> pows = new Hashtable<Integer,Integer>();会去掉你的编译器注释。
发布于 2012-11-07 22:12:43
brute类包含以下内容:
Hashtable pows = new Hashtable();它使用的是原始类型Hashtable。这里应该使用泛型。此外,它应该使用HashMap而不是遗留集合类Hashtable。
Map<Integer, Integer> = new HashMap<Integer, Integer>();这样就不需要演员了:
if (tries > pows.get(lenght-1)){(请注意,‘length’拼写错误,它应该是'length')。
除此之外,成员变量应该是private的,并且代码不符合世界上大多数地方使用的实际编码标准(类名应该以大写字符开头,变量名不应该包含下划线)。
https://stackoverflow.com/questions/13271338
复制相似问题