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

Reply via email to