Java pass collection в качестве параметра, не добавляемого к фактической ссылке - PullRequest
0 голосов
/ 14 марта 2011

У меня есть регистр активности с моей службой в качестве слушателя, и на некоторых событиях я передаю коллекцию, хранящуюся внутри службы, которая отлично работает для чтения коллекции, отображаемой с помощью моего адаптера списка.Тем не менее, теперь я хочу добавить коллекцию в свой обратный вызов, но она не работает, как ссылка, я думал, что это было!

//last param tells service to send the list
//first param sets listener that recieves the sent list
m_uploader.request(new RequestListener() {

    @Override
    public void getCompletedUploads(ArrayList<Job> completed) { 
       //dont care
    }

    @Override
    public void getActiveUploads(ConcurrentLinkedQueue<Job> current) {
        current.add(m_job); //doesnt add to queue in my service
        ImportActivity.this.finish();
    }

}, ServiceRequestArgs.create(RequestActiveUploadsCommand.class)); 

//impl of request()
public <T extends ICommand> void request(
    IFileUploadListener listener, ServiceRequestArgs<T> args) 
{
    if (args.getClassToken().equals(RequestActiveUploadsCommand.class))
        new RequestActiveUploadsCommand(listener, m_jobQueue).Execute();
    if (args.getClassToken().equals(RequestCompleteUploadsCommand.class))
        new RequestCompleteUploadsCommand(listener, m_completedList).Execute();
        //calls getActiveUploads on listener
}

edit Хорошо, так что я определенно просто передаюЗначение ссылки.Java ненавидит в стороне, как мне изменить реальную ссылку?

1 Ответ

1 голос
/ 14 марта 2011

При вызове current.add следует добавить новый Job в очередь, как вы ожидаете.

Однако в коллекциях Java Concurrent есть некоторые специальные свойства.Во-первых, Iterator, возвращаемое параллельной коллекцией, является слабо согласованным : оно может отражать или не отражать изменения, внесенные в коллекцию после создания итератора.

Это относится как к Iterator, которые вы запрашиваете вручную, так и к тем, которые автоматически создаются как часть для каждого.

...