我习惯在shell上进行python风格的REPL测试,我正在学习Java。我最近了解到几乎所有Java代码都可以通过groovy以REPL方式执行。到目前为止,groovy控制台帮助我快速测试了我的Java代码片段。
我试图在groovy控制台中运行以下Java代码(我碰巧从another Stackoverflow question获得):
String md5(String s)
{
MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
digest.update(s.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
for (int i=0; i<messageDigest.length; i++)
hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
return hexString.toString();
}
String md5hash = md5("a test message");
当我尝试执行此操作时,收到以下错误消息:
原始类型文字:字节不能用作行的方法名称:5列:13。文件:ConsoleScript0 at line:6,column:13
我在SO和其他地方搜索了错误消息,但我无法获得任何线索。它似乎是有效的Java代码,为什么groovy认为我试图使用“byte”作为方法名?
我正在使用Groovy版本:1.8.4 JVM:1.6.0_26
答案 0 :(得分:7)
我不知道为什么它会给出错误的错误消息,但尝试使用更惯用的方式来声明变量:
byte[] messageDigest = digest.digest();
(我也强烈建议你不使用String.getBytes()
而不指定字符编码。我假设你真的不想要结果是特定于平台的。)