0

次のクラスで 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;
 }

それはこの問題を回避する良い方法ですか?

4

0 に答える 0