Class FractionConverter

java.lang.Object
org.apache.sis.internal.converter.FractionConverter
All Implemented Interfaces:
Serializable, Function<Fraction,Integer>, ObjectConverter<Fraction,Integer>

public final class FractionConverter extends Object
Handles conversions from Fraction to other kind of numbers.
Since:
0.8
Version:
0.8
Author:
Martin Desruisseaux (Geomatys)
See Also:
  • Field Details

    • INSTANCE

      public static final FractionConverter INSTANCE
      The unique instance of this converter.
  • Constructor Details

    • FractionConverter

      public FractionConverter()
      Creates a new converter. Only one instance is enough, but this constructor needs to be public for allowing invocation by ServiceLoader.
  • Method Details

    • unique

      public ObjectConverter<Fraction,Integer> unique()
      Returns the unique instance of this converter.
      Returns:
      the unique instance of this converter.
      See Also:
      • SystemConverter.unique()
    • properties

      public Set<FunctionProperty> properties()
      Declares that this converter is injective, surjective, invertible and preserve order.
      Returns:
      the properties of this bijective converter.
    • apply

      public Integer apply(Fraction value) throws UnconvertibleObjectException
      Converts the given fraction to an integer.
      Parameters:
      value - the fraction to convert.
      Returns:
      the given fraction as an integer.
      Throws:
      UnconvertibleObjectException - if the given fraction is not an integer.
    • inverse

      public ObjectConverter<Integer,Fraction> inverse()
      Returns the converter from integers to fractions.
      Specified by:
      inverse in interface ObjectConverter<Fraction,Integer>
      Returns:
      the inverse converter.
      See Also:
    • getSourceClass

      public final Class<Fraction> getSourceClass()
      Returns the source class given at construction time.
      Specified by:
      getSourceClass in interface ObjectConverter<S,T>
      Returns:
      the type of objects to convert.
    • getTargetClass

      public final Class<Integer> getTargetClass()
      Returns the target class given at construction time.
      Specified by:
      getTargetClass in interface ObjectConverter<S,T>
      Returns:
      the type of converted objects.
    • equals

      public final boolean equals(Object other)
      Performs the comparisons documented in Object.equals(Object) with an additional check: if both objects to compare are SystemConverter, then also requires the two objects to be of the same class. We do that in order to differentiate the "ordinary" converters from the FallbackConverter.

      Implementation note

      This is admittedly a little bit convolved. A cleaner approach would have been to not allow the ConverterRegister hash map to contain anything else than ClassPair keys, 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 compare ObjectConverters in a separated method, but users invoking equals on our system converters could be surprised.

      Our equals(Object) definition have the following implications regarding the way to use the ConverterRegistry.converters map:

      • 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 the Map.get(K) method. The Map is "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 of ClassPair instance (not a subclass).
      Parameters:
      other - the object to compare with this SystemConverter.
      Returns:
      true if the given object is a ClassPair or a converter of the same class than this, and both have the same source and target classes.
    • readResolve

      protected final Object readResolve() throws ObjectStreamException
      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 this ClassPair. See Object.equals(Object) javadoc for information on the scope of this method.
      Overrides:
      hashCode in class Object
    • toString

      public String toString()
      Returns a string representation for this entry. Used for formatting error messages.
      Overrides:
      toString in class Object