1 8 9 15 package jfun.yan; 16 17 25 final class RecoveredComponent<T> extends Component<T> { 26 private final Creator<T> creator; 27 private final Recovery<T> recovery; 28 29 RecoveredComponent(final Creator<T> creator, final Recovery<T> recovery) { 30 this.creator = creator; 31 this.recovery = recovery; 32 } 33 34 public boolean equals(Object obj) { 35 if(obj instanceof RecoveredComponent){ 36 final RecoveredComponent other = (RecoveredComponent)obj; 37 return creator.equals(other.creator) && recovery.equals(other.recovery); 38 } 39 else return false; 40 } 41 public int hashCode() { 42 return creator.hashCode()*31+recovery.hashCode(); 43 } 44 public String toString() { 45 return ""+creator+"."+"otherwise<"+recovery+">"; 46 } 47 public Class <T> getType() { 48 return null; 49 } 50 public T create(Dependency dep){ 51 try{ 52 creator.verify(dep); 53 } 54 catch(RuntimeException e){ 55 return recovery.recover(e).create(dep); 56 } 57 return creator.create(dep); 58 } 59 public Class verify(Dependency dep){ 60 try{ 61 return creator.verify(dep); 62 } 63 catch(RuntimeException e){ 64 return recovery.recover(e).verify(dep); 65 } 66 } 67 public boolean isSingleton(){ 68 return creator.isSingleton(); 69 } 70 public boolean isConcrete(){ 71 return creator.isConcrete(); 72 } 73 } 74 | Popular Tags |