2015-01-21 2 views
5

У меня есть ошибки с помощью Java Collections в JDK 1.7: я получил это исключение в этой строке: proposalStatuses.addAll (getAllSubmittedStatuses())Java UnsupportedOperationException с коллекции объектов

java.lang.UnsupportedOperationException 
     at java.util.AbstractList.add(Unknown Source) 
     at java.util.AbstractList.add(Unknown Source) 
     at java.util.AbstractCollection.addAll(Unknown Source) 

пытается добавить коллекцию к списку

/** 
    * Gets the all submitted statuses. 
    * 
    * @return the all submitted statuses 
    */ 
    private Collection<ProposalStatus> getAllSubmittedStatuses() { 

     return Arrays.asList(
        ProposalStatus.SAVED_TO_IOS 
       , ProposalStatus.SENDED_TO_IOS_IN_PROGRESS 
       ); 
    } 

    /** 
    * Gets the all received statuses. 
    * 
    * @return the all received statuses 
    */ 
    private Collection<ProposalStatus> getAllReceivedStatuses() { 

     Collection<ProposalStatus> proposalStatuses = 

       Arrays.asList(
        ProposalStatus.RECEIVED_BY_IOS 
       , ProposalStatus.SUBMITTED_TO_IOS 
       , ProposalStatus.RECEIVED_IOS 
       ); 

     proposalStatuses.addAll(getAllSubmittedStatuses()); 

     return proposalStatuses; 
    } 

ответ

11

Из javadoc of Arrays.asList() (курсив мой):

Возвращает список, состоящий из фиксированного размера подкрепленную указанного массива

Короче говоря: вы не можете .add*() или .remove*() из такого списка! Вам придется использовать другую модифицируемую реализацию List (например, ArrayList).

1

чтобы объяснить немного больше, практически, я использую код:

private Collection<ProposalStatus> getAllSubmittedStatuses() { 

    // This returns a list that cannot be modified, fixed size 
    return Arrays.asList(
       ProposalStatus.SAVED_TO_IOS 
      , ProposalStatus.SENDED_TO_IOS_IN_PROGRESS 
      ); 
} 

/** 
* Gets the all received statuses. 
* 
* @return the all received statuses 
*/ 
private Collection<ProposalStatus> getAllReceivedStatuses() { 

    // proposalStatuses will be a fixed-size list so no changing 
    Collection<ProposalStatus> proposalStatuses = 

      Arrays.asList(
       ProposalStatus.RECEIVED_BY_IOS 
      , ProposalStatus.SUBMITTED_TO_IOS 
      , ProposalStatus.RECEIVED_IOS 
      ); 

    // This will not be possible, also you cannot remove anything. 
    proposalStatuses.addAll(getAllSubmittedStatuses()); 

    return proposalStatuses; 
} 

Для вашей цели, я хотел бы сделать следующее:

return new ArrayList<ProposalStatus>(Arrays.asList(ProposalStatus.SAVED_TO_IOS,ProposalStatus.SENDED_TO_IOS_IN_PROGRESS) 

Это должно помочь вам получить объекты коллекции.

1

Arrays.asList() возвращает неизменный список, который вы не можете изменить.

В частности, методы add(), addAll() и remove() не реализованы.