[armedbear-devel] Longs, Bytes, or casting in general
Mark Evenson
evenson at panix.com
Tue Jul 17 09:00:38 UTC 2012
On Jul 17, 2012, at 04:19 , Theam Yong Chew wrote:
> Hi folks,
>
> I was wondering how we can conveniently pass longs, bytes into normal
> Java functions/constructors, for example,
>
> (jnew "java.lang.Byte" 23)
> ==>
> Java exception 'java.lang.NoSuchMethodException: Byte(java.lang.Integer)'.
> [Condition of type JAVA-EXCEPTION]
>
> Here only constructor available is for "byte" inputs. It's a pain to
> have to use this every time we use a byte, long, or similar:
>
> (jnew (jconstructor "java.lang.Byte" "byte") 23)
> #<java.lang.Byte 23 {3A9300BF}>
Unfortunately, I can't think of a way around this off the top of
my head, although I may be missing something. I suppose what we
would want would be some sort of algorithm that would keep trying
constructors by casting the types of parameters up/down their
inheritance trees until it found a match. Although it would be
rather unsafe (from thinking about it briefly about casting things
between signed/unsigned representation), it might be useful enough
to construct something for experimentation.
> Relatedly/alternatively, is there a way convenient to coerce values to
> a certain type, forcing 23 above (default int/Integer) to be a byte or
> long?
JCOERCE does this:
CL-USER> (jcoerce 23 "byte")
#<java.lang.Byte 23 {3A5F299D}>
although it always wraps primitive types in the associated numeric tower class.
More information about the armedbear-devel
mailing list