@Override
	public final <V> T fromValue(V value) {
		checkStatus(Status.INITIALIZED);
		try {
			@SuppressWarnings("unchecked")
			TypeAdapter<T,V> adapter = (TypeAdapter<T, V>) TypeAdapter.createAdapter(this.termClass,value.getClass());
			for(T candidate:this.terms.values()) {
				if(value.equals(adapter.adapt(candidate))) {
					return candidate;
				}
			}
			return null;
		} catch (CannotAdaptClassesException e) {
			throw new UnsupportedOperationException("Class '"+this.termClass.getCanonicalName()+" cannot be transformed to '"+value.getClass().getCanonicalName()+"'",e);
		}
	}
@Override
	public final <V> T fromValue(V value) {
		checkStatus(Status.INITIALIZED);
		try {
			@SuppressWarnings("unchecked")
			TypeAdapter<T,V> adapter = (TypeAdapter<T, V>) TypeAdapter.createAdapter(this.termClass,value.getClass());
			for(T candidate:this.terms.values()) {
				if(value.equals(adapter.adapt(candidate))) {
					return candidate;
				}
			}
			return null;
		} catch (CannotAdaptClassesException e) {
			throw new UnsupportedOperationException("Class '"+this.termClass.getCanonicalName()+" cannot be transformed to '"+value.getClass().getCanonicalName()+"'",e);
		}
	}
@ Override public final < V > T fromValue ( V value ) { checkStatus ( Status . INITIALIZED ) ; try { @ SuppressWarnings ( "unchecked" ) TypeAdapter < T , V > adapter = ( TypeAdapter < T , V > ) TypeAdapter . createAdapter ( this . termClass , value . getClass ( ) ) ; for ( T candidate : this . terms . values ( ) ) { if ( value . equals ( adapter . adapt ( candidate ) ) ) { return candidate ; } } return null ; } catch ( CannotAdaptClassesException e ) { throw new UnsupportedOperationException ( "Class '" + this . termClass . getCanonicalName ( ) + " cannot be transformed to '" + value . getClass ( ) . getCanonicalName ( ) + "'" , e ) ; } }
{@inheritDoc}
{