public T get ( V value ) { T found = find ( value ) ; if ( found != null ) { return found ; } synchronized ( runtimeDefined ) { for ( T obj : runtimeDefined ) { if ( matches ( obj , value ) ) { return obj ; } } T created = create ( value ) ; runtimeDefined . add ( created ) ; return created ; } }
Searches for a case object by value creating a new object if one cannot be found .