次のクラスで CopyOnWriteArraySet を使用しているのは、単純にスレッド セーフな反復子が好きだからです。
public class MyClass{
Set _children = new CopyOnWriteArraySet();
public void setChildren(Set children){
_children = children;
}
public Set getChildren(){
return _children;
}
}
ただし、CopyOnWriteArraySet を独自の PersistentSet (内部で HashSet を使用) に置き換える永続性のために Hibernate も使用します。
残念ながら、HashSet はスレッド セーフではないため、CopyOnWriteArraySet を元に戻したいと思います。
ここでの変換のベストプラクティスは何ですか?
私の個人的な素朴な試みは、セッターを次のように置き換えることです。
public void setChildren(Set children){
CopyOnWriteArraySet newSet = null;
if ((children instanceof CopyOnWriteArraySet) == false){
newSet = new CopyOnWriteArraySet(children);
}
else{
newSet = (CopyOnWriteArraySet)children;
}
_children = newSet;
}
それはこの問題を回避する良い方法ですか?