On Sat, Nov 7, 2009 at 10:41 AM, David Brown <[email protected]> wrote:
>
> I can't figure out how to avoid reflection, in the 'update' method of
> MessageDigest. It is overloaded on a single argument with either
> 'byte', 'byte[]', or 'java.nio.ByteBuffer'.
>
> (import '(java.security MessageDigest))
> (set! *warn-on-reflection* true)
>
> The compiler didn't seem to like a tag that wasn't actually a class
> name:
>
> (def byte-array-class
> (class (make-array Byte/TYPE 0)))
>
> ;; "Unable to resolve classname: byte-array-class"
> (defn update1
> [#^MessageDigest md #^{:tag byte-array-class} item]
> (.update md item))
Right, :tag values should be symbols, not classes or instances of
those classes. Most of those symbols name actual Java classnames
but a few other symbols are supported, mostly for arrays of
primitives:
objects Object[].class;
ints int[].class;
longs long[].class;
floats float[].class;
doubles double[].class;
chars char[].class;
shorts short[].class;
bytes byte[].class;
booleans boolean[].class;
This should work:
(defn update1 [#^MessageDigest md, #^bytes item]
(.update md item))
--Chouser
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---