首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java编译警告不安全条件

Java编译警告不安全条件
EN

Stack Overflow用户
提问于 2012-11-07 22:02:26
回答 3查看 146关注 0票数 0

我最近开始用java编程,我写了这样的代码:https://github.com/mouuff/JavaMD5cracker

代码可以工作,但我得到了这个creppy警告:

代码语言:javascript
复制
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)不安全,或者我不知道...

代码语言:javascript
复制
if (tries > (int)pows.get(lenght-1))

有人能帮我一下吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-07 22:10:12

这是因为您在brute.java中声明了哈希表

代码语言:javascript
复制
Hashtable pows = new Hashtable();

当编译器执行此行时

代码语言:javascript
复制
if (tries > (int)pows.get(lenght-1))

它不知道来自pows的元素的类型。

使用泛型更改您的哈希表声明

代码语言:javascript
复制
Hashtable<Integer, Integer> pows = new Hashtable<Integer,Integer>();
票数 2
EN

Stack Overflow用户

发布于 2012-11-07 22:05:33

只是您正在对另一个对象中的int执行强制转换操作。这是一个未经检查的操作,因为编译器无法检查pows.get(length-1)返回的内容是否真的可以转换为int

如果你信任(我的意思是真正信任)你的代码,并且知道int的强制转换总是可以完成的,你可以让它这样做,这只是一个编译器警告。

同时,看一看Math对象。也许有一种更简单、更安全的方法来完成你想要完成的事情。

编辑

更改此设置:

代码语言:javascript
复制
Hashtable pows = new Hashtable();

至:

代码语言:javascript
复制
Hashtable<Integer,Integer> pows = new Hashtable<Integer,Integer>();

会去掉你的编译器注释。

票数 1
EN

Stack Overflow用户

发布于 2012-11-07 22:12:43

brute类包含以下内容:

代码语言:javascript
复制
Hashtable pows = new Hashtable();

它使用的是原始类型Hashtable。这里应该使用泛型。此外,它应该使用HashMap而不是遗留集合类Hashtable

代码语言:javascript
复制
Map<Integer, Integer> = new HashMap<Integer, Integer>();

这样就不需要演员了:

代码语言:javascript
复制
if (tries > pows.get(lenght-1)){

(请注意,‘length’拼写错误,它应该是'length')。

除此之外,成员变量应该是private的,并且代码不符合世界上大多数地方使用的实际编码标准(类名应该以大写字符开头,变量名不应该包含下划线)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13271338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档