Tell the compiler that the type you're passing to the constructor is a 
Collection, so it will know which constructor to use without reflection.

(set! *warn-on-reflection* true)
=> true
(import '(java.util ArrayList Collection))
=> java.util.Collection
(ArrayList. (list 1 2))
Reflection warning, 
/Users/bfabry/Library/Caches/IdeaIC15/tmp/form-init108635367050123227.clj:1:1 
- call to java.util.ArrayList ctor can't be resolved.
=> [1 2]
(ArrayList. ^Collection (list 1 2))
=> [1 2]



On Tuesday, January 26, 2016 at 1:56:19 PM UTC-8, Ritchie Cai wrote:
>
> Quoting for small example like I mention is not an issue, but in general, 
> I need to pass an vector or list, since that's what I get, in which case I 
> cannot quote. 
>
> On Tuesday, January 26, 2016 at 3:52:17 PM UTC-6, Michael Willis wrote:
>>
>> What's not practical about quoting?  I thought it was considered more 
>> idiomatic than doing (list ...)
>>
>> On Sunday, January 17, 2016 at 2:48:29 PM UTC-6, Ritchie Cai wrote:
>>>
>>> Hi all,
>>>
>>> I'm trying to create a Java ArrayList object from a Clojure collection 
>>> to pass to another Java API. I get reflection warnings when the elements 
>>> are not primitive types, in this case I'm using SparseIndexedVector 
>>> class from vectorz library.
>>>
>>> (ArrayList. [c0 c1 c2])
>>> Reflection warning, *cider-repl localhost*:77:11 - call to 
>>> java.util.ArrayList ctor can't be resolved.
>>>
>>> where c0 c1 c2 are of type SparseIndexedVector. Alternatively, I can 
>>> create create ArrayList then add elements one by one in a loop.
>>>
>>> (doto (ArrayList.)
>>>    (.add c0)
>>>    (.add c1)
>>>    (.add c2))
>>>
>>> But I'm wondering if there is away to get rid of the the reflection 
>>> warning when calling ArrayList constructor. 
>>>
>>> Also, quoting a list will not give reflection warning:
>>>
>>> (ArrayList. '(c0 c1 c2))  ;; no warning
>>>
>>> (ArrayList. (list c0 c1 c2)) 
>>> Reflection warning, *cider-repl localhost*:77:11 - call to 
>>> java.util.ArrayList ctor can't be resolved.
>>>
>>> However, quoting is not very practical.
>>>
>>> Thanks
>>> Ritchie
>>>
>>>

-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to