Hmm, You're right, the code is more readable with a cast ;)
A side effect of Generics being bolted on, hope they fix it some day. Peter. ----- Original message ----- > On 12/19/2011 1:14 PM, Peter Firmstone wrote: > > Gregg Wonderly wrote: > > > On 12/18/2011 11:59 PM, Peter Firmstone wrote: > > > > @Override > > > > public boolean implies(Permission permission) { > > > > if ( ! cl.isInstance(permission)) return false; > > > > Permission [] p = perms.toArray(new Permission[0]); > > > >//perms.size() > > > > may change > > > > > > I not sure why you are using an empty Permission array here, and then > > > looping over it. Is this from some other testing? > > > > > > Gregg > > > > > The collection is wrapped with a ConcurrentCollection's multi read, single > > write wrapper, by passing a zero length array to the collection, it obtains > > a > > read lock, the collection creates a new array, sized to suit the underlying > > array, copy's the collection's contents into it and returns, releasing the > > read lock, the operation is atomic. > > If I did this, the call would acquire and release two read locks > > consecutively, it wouldn't be atomic: > > > > Permission[] p = perms.toArray(new Permission[perms.size()]); > > > > It's there to avoid a cast: > > > > Permission [] p = (Permission[]) perms.toArray(); > > Okay, that make sense from a logic perspective. It might be better to use the > second version just to remove the distraction of trying to understand how a > zero > length array results in a non-zero length result. > > Your call, I'm not sure it really matters. > > Gregg