@GwtCompatible public abstract class Converter<A,B> extends Object implements Function<A,B>
A to B with an associated reverse function from B
 to A; used for converting back and forth between different representations of the same
 information.
 The reverse operation may be a strict inverse (meaning that converter.reverse().convert(converter.convert(a)).equals(a) is always true). However, it is very
 common (perhaps more common) for round-trip conversion to be lossy. Consider an
 example round-trip using Doubles.stringConverter():
 
stringConverter().convert("1.00") returns the Double value 1.0
   stringConverter().reverse().convert(1.0) returns the string "1.0" --
       not the same string ("1.00") we started with
 Note that it should still be the case that the round-tripped and original objects are similar.
A converter always converts null to null and non-null references to non-null
 references. It would not make sense to consider null and a non-null reference to be
 "different representations of the same information", since one is distinguishable from
 missing information and the other is not. The convert(A) method handles this null
 behavior for all converters; implementations of doForward(A) and doBackward(B) are
 guaranteed to never be passed null, and must never return null.
 
Getting a converter:
Enums.stringConverter(java.lang.Class<T>), Ints.stringConverter or the reverse views of these.
   Maps.asConverter. For example, use this to
       create a "fake" converter for a unit test. It is unnecessary (and confusing) to mock
       the Converter type using a mocking framework.
   doForward(A) and doBackward(B) methods.
   from factory method.
 Using a converter:
converter.convert(a).
   converter.convertAll(as).
   converter.reverse().convert(b) or converter.reverse().convertAll(bs).
   converter or converter.reverse() anywhere a Function is accepted (for example Stream.map).
   doForward(A) or doBackward(B) directly; these exist only to
       be overridden.
 
   return new Converter<Integer, String>() {
     protected String doForward(Integer i) {
       return Integer.toHexString(i);
     }
     protected Integer doBackward(String s) {
       return parseUnsignedInt(s, 16);
     }
   };
 An alternative using Java 8:
 return Converter.from(
     Integer::toHexString,
     s -> parseUnsignedInt(s, 16));
 | Modifier | Constructor and Description | 
|---|---|
protected  | 
Converter()
Constructor for use by subclasses. 
 | 
| Modifier and Type | Method and Description | 
|---|---|
<C> Converter<A,C> | 
andThen(Converter<B,C> secondConverter)
Returns a converter whose  
convert method applies secondConverter to the result
 of this converter. | 
B | 
apply(A a)
Deprecated. 
 
Provided to satisfy the  
Function interface; use convert(A) instead. | 
B | 
convert(A a)
Returns a representation of  
a as an instance of type B. | 
Iterable<B> | 
convertAll(Iterable<? extends A> fromIterable)
Returns an iterable that applies  
convert to each element of fromIterable. | 
protected abstract A | 
doBackward(B b)
Returns a representation of  
b as an instance of type A. | 
protected abstract B | 
doForward(A a)
Returns a representation of  
a as an instance of type B. | 
boolean | 
equals(Object object)
Indicates whether another object is equal to this converter. 
 | 
static <A,B> Converter<A,B> | 
from(Function<? super A,? extends B> forwardFunction,
    Function<? super B,? extends A> backwardFunction)
Returns a converter based on separate forward and backward functions. 
 | 
static <T> Converter<T,T> | 
identity()
Returns a serializable converter that always converts or reverses an object to itself. 
 | 
Converter<B,A> | 
reverse()
Returns the reversed view of this converter, which converts  
this.convert(a) back to a
 value roughly equivalent to a. | 
protected Converter()
@ForOverride protected abstract B doForward(A a)
a as an instance of type B. If a cannot be
 converted, an unchecked exception (such as IllegalArgumentException) should be thrown.a - the instance to convert; will never be null@ForOverride protected abstract A doBackward(B b)
b as an instance of type A. If b cannot be
 converted, an unchecked exception (such as IllegalArgumentException) should be thrown.b - the instance to convert; will never be nullUnsupportedOperationException - if backward conversion is not implemented; this should be
     very rare. Note that if backward conversion is not only unimplemented but
     unimplementable (for example, consider a Converter<Chicken, ChickenNugget>),
     then this is not logically a Converter at all, and should just implement Function.@CanIgnoreReturnValue @NullableDecl public final B convert(@NullableDecl A a)
a as an instance of type B.a is null@CanIgnoreReturnValue public Iterable<B> convertAll(Iterable<? extends A> fromIterable)
convert to each element of fromIterable. The
 conversion is done lazily.
 The returned iterable's iterator supports remove() if the input iterator does. After
 a successful remove() call, fromIterable no longer contains the corresponding
 element.
@CanIgnoreReturnValue public Converter<B,A> reverse()
this.convert(a) back to a
 value roughly equivalent to a.
 The returned converter is serializable if this converter is.
 
Note: you should not override this method. It is non-final for legacy reasons.
public final <C> Converter<A,C> andThen(Converter<B,C> secondConverter)
convert method applies secondConverter to the result
 of this converter. Its reverse method applies the converters in reverse order.
 The returned converter is serializable if this converter and secondConverter
 are.
@Deprecated @CanIgnoreReturnValue @NullableDecl public final B apply(@NullableDecl A a)
Function interface; use convert(A) instead.Functioninput. This method is generally
 expected, but not absolutely required, to have the following properties:
 Objects.equal(a, b) implies that Objects.equal(function.apply(a),
       function.apply(b)).
 public boolean equals(@NullableDecl Object object)
Most implementations will have no reason to override the behavior of Object.equals(java.lang.Object).
 However, an implementation may also choose to return true whenever object is a
 Converter that it considers interchangeable with this one. "Interchangeable"
 typically means that Objects.equal(this.convert(a), that.convert(a)) is true for
 all a of type A (and similarly for reverse). Note that a false
 result from this method does not imply that the converters are known not to be
 interchangeable.
public static <A,B> Converter<A,B> from(Function<? super A,? extends B> forwardFunction, Function<? super B,? extends A> backwardFunction)
Converter and
 implement its doForward(A) and doBackward(B) methods directly.
 These functions will never be passed null and must not under any circumstances
 return null. If a value cannot be converted, the function should throw an unchecked
 exception (typically, but not necessarily, IllegalArgumentException).
 
The returned converter is serializable if both provided functions are.
Copyright © 2010–2018. All rights reserved.