我最近开始用java编程我做了这段代码: https://github.com/mouuff/JavaMD5cracker
代码工作但我得到了这个警告:
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))
有人可以帮助我吗?
答案 0 :(得分:2)
因为您在 brute.java
中的哈希表声明Hashtable pows = new Hashtable();
编译器执行此行时
if (tries > (int)pows.get(lenght-1))
它不知道 pows 中元素的类型是什么。
使用泛型
更改哈希表声明Hashtable<Integer, Integer> pows = new Hashtable<Integer,Integer>();
答案 1 :(得分:1)
只是你正在另一个对象中为int
进行强制转换操作。这是一个未经检查的操作,因为编译器无法检查pows.get(length-1)
返回的内容是否真的可以转换为int
。
如果你信任(我的意思是真的相信)你的代码,并且知道总是可以完成int
的转换,你可以这样做,它只是一个编译器警告。
同时,看看Math对象。也许有一种简单而安全的方式来完成你想要完成的任务。
修改强>
更改此内容:
Hashtable pows = new Hashtable();
要:
Hashtable<Integer,Integer> pows = new Hashtable<Integer,Integer>();
将摆脱你的编译器笔记。
答案 2 :(得分:1)
班级brute
包含以下内容:
Hashtable pows = new Hashtable();
它使用原始类型Hashtable
。应该在这里使用泛型。此外,它应该使用HashMap
而不是旧版集合类Hashtable
。
Map<Integer, Integer> = new HashMap<Integer, Integer>();
演员阵容将是不必要的:
if (tries > pows.get(lenght-1)){
(注意'lenght'拼写错误,应该是'长度')。
除此之外,成员变量应该是private
,并且代码不符合世界上大多数人使用的事实上的编码标准(类名应该以大写字符开头,变量名称不应包含下划线。)