2017-05-02 7 views
0

私は同じget ...()メソッドを持つ4つの関数を持っていますが、名前や識別子だけを変更しますが、新しいものを追加するときは4番目のものと異なる結果になります項目をリストすると、java.lang.UnsupportedOperationExceptionがスローされます。私はあなたに保証します、私はすでに4つの関数とその関係をすべてダブルチェックしましたが、なぜ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スタックトレース:

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) 
+4

stackTrace全体を投稿できますか? 'list'実装' criteria.list() 'が生成されることを知ることも興味深いかもしれません。 – Aaron

+0

@nbokmansのように、' criteria.list() 'が' Arrays.asList() '(または同等のもの) 'add'操作をサポートしていないインスタンスです。 – AxelH

+1

あなたの答えは、[AbstractList documention](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractList.html)を参照してください。そして解決策は与えられている。 – AxelH

答えて

1

それが明確に文書でない限り、それはあなたが別の方法から受信したリストを変更しても安全だと仮定しないでください。例外をスローしない場合でも、クリティカルな状態を変更している可能性があります(安全に実装されていない場合)。新しいリストにコピーして、好きなようにすることができます:

+0

それは動作します。しかし、他の3つの関数が例外をスローしなかった理由を教えてください。 –

+0

他の機能はありません。 – shmosel

関連する問題