почему я не могу вызвать .update для экземпляра MessageDigest - PullRequest
3 голосов
/ 16 мая 2010

когда я запускаю это из repl:

(def md (MessageDigest/getInstance "SHA-1"))
(. md update (into-array [(byte 1)  (byte 2)  (byte 3)]))

Я получаю:

No matching method found: update for class java.security.MessageDigest$Delegate

Документация по Java 6 для MessageDigest:

update(byte[] input) 
      Updates the digest using the specified array of bytes.

и класс (class (into-array [(byte 1) (byte 2) (byte 3)])) есть [Ljava.lang.Byte;

Я что-то упустил в определении обновления?
Не создаю класс, я думаю, что я?
Не передать это тип, я думаю, что я?

Ответы [ 2 ]

3 голосов
/ 17 мая 2010

Поскольку вы вызываете update (Byte []), который не определен в MessageDigest. Вам нужно преобразовать его в примитивный массив.

Вы можете сделать что-то вроде этого,

 (defn updateBytes [#^MessageDigest md, #^bytes data] 
      (.update md data)) 
2 голосов
/ 17 мая 2010

Попробуйте:

(. md update (into-array Byte/TYPE [(byte 1) (byte 2) (byte 3)]))
...