Class IdentityConverter<S extends T,T>
java.lang.Object
org.apache.sis.internal.converter.IdentityConverter<S,T>
- Type Parameters:
S- the base type of source objects.T- the base type of converted objects.
- All Implemented Interfaces:
Serializable,Function<S,,T> ObjectConverter<S,T>
An object converter which returns the source unchanged.
Immutability and thread safety
This class is immutable and thus inherently thread-safe.- Since:
- 0.3
- Version:
- 0.3
- Author:
- Martin Desruisseaux (IRD, Geomatys)
- See Also:
-
Constructor Summary
ConstructorsConstructorDescriptionIdentityConverter(Class<S> sourceClass, Class<T> targetClass, ObjectConverter<T, S> inverse) Creates a new identity converter. -
Method Summary
Modifier and TypeMethodDescriptionReturns the given object unchanged.final booleanPerforms the comparisons documented inObject.equals(Object)with an additional check: if both objects to compare areSystemConverter, then also requires the two objects to be of the same class.Returns the source class given at construction time.Returns the target class given at construction time.final inthashCode()Returns a hash code value for thisClassPair.inverse()Returns the inverse converter, if any.Returns the properties of this converter.protected final ObjectReturns the singleton instance on deserialization, if any.toString()Returns a string representation for this entry.unique()Returns an unique instance of this converter if one exists.
-
Constructor Details
-
IdentityConverter
Creates a new identity converter.- Parameters:
sourceClass- the source class.targetClass- the target class.inverse- the inverse converter, ornullif none.
-
-
Method Details
-
properties
Returns the properties of this converter. This method returns a newEnumSetinstead of returning a constant, because creatingEnumSetis cheap and the standard JDK implementation has optimizations for bulk operations betweenEnumSetinstances. Those optimizations are lost (at least on JDK6) is we wrap theEnumSetin aCollections.unmodifiableSetview.- Returns:
- the manners in which source values are mapped to target values.
-
inverse
Returns the inverse converter, if any.- Specified by:
inversein interfaceObjectConverter<S extends T,T> - Returns:
- a converter for converting instances of T back to instances of S.
- Throws:
UnsupportedOperationException- if this converter is not invertible.- See Also:
-
apply
Returns the given object unchanged.- Parameters:
source- the value to convert.- Returns:
- the given value unchanged.
-
getSourceClass
Returns the source class given at construction time.- Specified by:
getSourceClassin interfaceObjectConverter<S,T> - Returns:
- the type of objects to convert.
-
getTargetClass
Returns the target class given at construction time.- Specified by:
getTargetClassin interfaceObjectConverter<S,T> - Returns:
- the type of converted objects.
-
equals
Performs the comparisons documented inObject.equals(Object)with an additional check: if both objects to compare areSystemConverter, then also requires the two objects to be of the same class. We do that in order to differentiate the "ordinary" converters from theFallbackConverter.Implementation note
This is admittedly a little bit convolved. A cleaner approach would have been to not allow theConverterRegisterhash map to contain anything else thanClassPairkeys, but the current strategy of using the same instance for keys and values reduces a little bit the number of objects to create in the JVM. Another cleaner approach would have been to compareObjectConverters in a separated method, but users invokingequalson our system converters could be surprised.Our
equals(Object)definition have the following implications regarding the way to use theConverterRegistry.convertersmap:- When searching for a converter of the same class than the key (as in the
ConverterRegistry.findEquals(SystemConverter)method), then there is no restriction on the key that can be given to theMap.get(K)method. TheMapis "normal". - When searching for a converter for a pair of source and target classes
(as in
ConverterRegistry.find(Class, Class)), the key shall be an instance ofClassPairinstance (not a subclass).
- Parameters:
other- the object to compare with thisSystemConverter.- Returns:
trueif the given object is aClassPairor a converter of the same class thanthis, and both have the same source and target classes.
- When searching for a converter of the same class than the key (as in the
-
unique
Returns an unique instance of this converter if one exists. If a converter already exists for the same source an target classes, then this converter is returned. Otherwise this converter is returned without being cached.- Returns:
- the unique instance, or
thisif no unique instance can be found. - See Also:
-
readResolve
Returns the singleton instance on deserialization, if any. If no instance already exist in the virtual machine, we do not cache the instance (for now) for security reasons.- Returns:
- the object to use after deserialization.
- Throws:
ObjectStreamException- if the serialized object defines an unknown data type.
-
hashCode
public final int hashCode()Returns a hash code value for thisClassPair. SeeObject.equals(Object)javadoc for information on the scope of this method. -
toString
Returns a string representation for this entry. Used for formatting error messages.
-