2011-11-20 6 views
1

Je suis habitué aux tests REPL de style python sur un shell et j'apprends Java. J'ai récemment appris que presque tout le code Java peut être exécuté de manière REPL via groovy. Jusqu'à présent, la console groovy m'a aidé à tester rapidement mes extraits de code Java.Erreur groovy: Littéral de type primitif: l'octet ne peut pas être utilisé comme nom de méthode

Je suis en train d'exécuter le code Java suivant dans la console groovy (que je trouvais obtenir de 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"); 

Lorsque je tente d'exécuter, je reçois le message d'erreur suivant:

Type primitif littéral: octet ne peut pas être utilisé comme nom de la méthode à la ligne: 5 colonne: 13. fichier: ConsoleScript0 à la ligne: 6, colonne: 13

j'ai cherché le message d'erreur ici sur SO et ailleurs, mais je ne pouvais pas obtenir d'indices. Il semble être un code Java valide, alors pourquoi Groovy pense-t-il que j'essaie d'utiliser "byte" comme nom de méthode?

J'utilise la version Groovy: 1.8.4 JVM: 1.6.0_26

+0

Avez-vous essayé 'byte [] messageDigest'? – rsp

Répondre

6

Je ne sais pas pourquoi il donne exactement ce message d'erreur, mais essayez la manière plus idiomatiques de déclarer la variable:

byte[] messageDigest = digest.digest(); 

(Je voudrais aussi fortement recommande que vous ne pas utiliserString.getBytes() sans spécifier le codage des caractères. Je suppose que vous ne voulez vraiment que le résultat soit spécifique à la plateforme.)

+0

byte [] messageDigest fonctionne correctement et résout mon problème. Merci. Cependant, je me demande toujours si l'un de ces rares cas où le code Java valide (non idiomatique, mais toujours valide) ne parvient pas à compiler dans groovy. – noumenon

Questions connexes