添加列表抛出java.lang.UnsupportedOperationException

时间:2017-05-02 08:22:46

标签: java unsupportedoperation

我有4个函数使用相同的get ...()方法,我只更改了名称或标识符,但我得到了不同的结果,第四个是什么时候添加新项目到列表,它抛出java.lang.UnsupportedOperationException。我向你保证,我已经仔细检查了所有4个函数及其关系,但不知道为什么第四个函数会像这样。

public List<PropertyAttribute> getAttributes() {
    if (selectedCode == null)
        return null;

    Criteria criteria = this.propertyAttributeDAO.createCriteria();
    FilterUtils.byField(criteria, "propertyCode", this.selectedCode, true);
    List<PropertyAttribute> list = criteria.list();

    if (isNewAttribute()) {
        list.add(0, this.curAttribute); //this line that throws exception
    }

    return list;
}

UPDATE STACK TRACE:

Caused by: java.lang.UnsupportedOperationException
        at java.util.AbstractList.add(AbstractList.java:148)
        at bos.web.pages.instrument.ViewProperty.getAttributes(ViewProperty.java:654)
        at $InternalPropertyConduit_237587e282284.get(Unknown Source)
        at org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:59)

1 个答案:

答案 0 :(得分:1)

除非明确记录,否则不要认为修改从其他方法收到的列表是安全的。即使它没有抛出异常,它也可能正在改变临界状态(如果它没有安全实施)。将其复制到新列表中,您可以随心所欲:

>>> stats = [('a', 1000), ('b', 3000), ('c', 100)]
>>> ','.join(key for key,value in stats)
'a,b,c'
>>> ','.join(key for key,value in stats) + ','
'a,b,c,'