String
, acting as the main client interface.
Support is provided for conversions based on the StringConverter
interface
or the ToString
and FromString
annotations.
StringConvert is thread-safe with concurrent caches.
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionCreates a new conversion manager including the JDK converters.StringConvert
(boolean includeJdkConverters, StringConverterFactory... factories) Creates a new conversion manager. -
Method Summary
Modifier and TypeMethodDescription<T> Optional
<TypedStringConverter<T>> converterFor
(Class<T> cls) Finds a suitable converter for the type.<T> T
convertFromString
(Class<T> cls, String str) Converts the specified object from aString
.convertToString
(Class<?> cls, Object object) Converts the specified object to aString
.convertToString
(Object object) Converts the specified object to aString
.static StringConvert
create()
Creates a new conversion manager including the extended standard set of converters.<T> StringConverter
<T> findConverter
(Class<T> cls) Finds a suitable converter for the type.findConverterNoGenerics
(Class<?> cls) Finds a suitable converter for the type with open generics.<T> FromStringConverter
<T> findFromStringConverter
(Class<T> cls) Finds a suitable from-string converter for the type.<T> TypedStringConverter
<T> findTypedConverter
(Class<T> cls) Finds a suitable converter for the type.findTypedConverterNoGenerics
(Class<?> cls) Finds a suitable converter for the type with open generics.<T> Optional
<org.joda.convert.TypedFromStringConverter<T>> fromStringConverterFor
(Class<T> cls) Finds a suitable from-string converter for the type.boolean
isConvertible
(Class<?> cls) Checks if a suitable converter exists for the type.<T> void
register
(Class<T> cls, StringConverter<T> converter) Registers a converter for a specific type.<T> void
register
(Class<T> cls, ToStringConverter<T> toString, FromStringConverter<T> fromString) Registers a converter for a specific type using two separate converters.void
registerFactory
(StringConverterFactory factory) Registers a converter factory.<T> void
registerMethodConstructor
(Class<T> cls, String toStringMethodName) Registers a converter for a specific type by method and constructor.<T> void
registerMethods
(Class<T> cls, String toStringMethodName, String fromStringMethodName) Registers a converter for a specific type by method names.toString()
Returns a simple string representation of the object.
-
Field Details
-
INSTANCE
An immutable global instance.This instance cannot be added to using
register(java.lang.Class<T>, org.joda.convert.StringConverter<T>)
, however annotated classes are picked up. To register your own converters, simply create an instance of this class.
-
-
Constructor Details
-
StringConvert
public StringConvert()Creates a new conversion manager including the JDK converters.The convert instance is mutable in a thread-safe manner. Converters may be altered at any time, including the JDK converters. It is strongly recommended to only alter the converters before performing actual conversions.
-
StringConvert
Creates a new conversion manager.The convert instance is mutable in a thread-safe manner. Converters may be altered at any time, including the JDK converters. It is strongly recommended to only alter the converters before performing actual conversions.
If specified, the factories will be queried in the order specified.
- Parameters:
includeJdkConverters
- true to include the JDK convertersfactories
- optional array of factories to use, not null
-
-
Method Details
-
create
Creates a new conversion manager including the extended standard set of converters.The returned converter is a new instance that includes additional converters:
- JDK converters
NumericArrayStringConverterFactory
NumericObjectArrayStringConverterFactory
CharObjectArrayStringConverterFactory
ByteObjectArrayStringConverterFactory
BooleanArrayStringConverterFactory
BooleanObjectArrayStringConverterFactory
The convert instance is mutable in a thread-safe manner. Converters may be altered at any time, including the JDK converters. It is strongly recommended to only alter the converters before performing actual conversions.
- Returns:
- the new converter, not null
- Since:
- 1.5
-
convertToString
Converts the specified object to aString
.This uses
findConverter(java.lang.Class<T>)
to provide the converter.- Parameters:
object
- the object to convert, null returns null- Returns:
- the converted string, may be null
- Throws:
RuntimeException
- (or subclass) if unable to convert
-
convertToString
Converts the specified object to aString
.This uses
findConverter(java.lang.Class<T>)
to provide the converter. The class can be provided to select a more specific converter.- Parameters:
cls
- the class to convert from, not nullobject
- the object to convert, null returns null- Returns:
- the converted string, may be null
- Throws:
RuntimeException
- (or subclass) if unable to convert
-
convertFromString
Converts the specified object from aString
.This uses
findFromStringConverter(java.lang.Class<T>)
to provide the converter.- Type Parameters:
T
- the type to convert to- Parameters:
cls
- the class to convert to, not nullstr
- the string to convert, null returns null- Returns:
- the converted object, may be null
- Throws:
RuntimeException
- (or subclass) if unable to convert
-
isConvertible
Checks if a suitable converter exists for the type.This performs the same checks as the
findConverter
methods. Calling this beforefindConverter
will cache the converter.Note that all exceptions, including developer errors are caught and hidden.
- Parameters:
cls
- the class to find a converter for, null returns false- Returns:
- true if convertible
- Since:
- 1.5
-
converterFor
Finds a suitable converter for the type.This returns an instance of
TypedStringConverter
for the specified class. This is designed for user code where theClass
object generics is known.The search algorithm first searches the registered converters. It then searches for
ToString
andFromString
annotations on the specified class, class hierarchy or immediate parent interfaces. Finally, it handlesEnum
instances.The returned converter may be queried for the effective type of the conversion. This can be used to find the best type to send in a serialized form.
Unusually for a method returning
Optional
, the method can also throw an exception. An empty result indicates that there is no converter for the specified class. An exception indicates there is a developer error in one of the converter factories.- Type Parameters:
T
- the type of the converter- Parameters:
cls
- the class to find a converter for, not null- Returns:
- the converter, empty if not found
- Throws:
IllegalArgumentException
- if the input class is nullRuntimeException
- (or subclass) if there is a developer error in one of the converter factories- Since:
- 3.0
-
fromStringConverterFor
public <T> Optional<org.joda.convert.TypedFromStringConverter<T>> fromStringConverterFor(Class<T> cls) Finds a suitable from-string converter for the type.This returns an instance of
FromStringConverter
for the specified class. In most cases this is identical tofindConverter(Class)
. However, it is permitted to have aFromString
annotation without aToString
annotation, and this method handles that use case.Unusually for a method returning
Optional
, the method can also throw an exception. An empty result indicates that there is no converter for the specified class. An exception indicates there is a developer error in one of the converter factories.- Type Parameters:
T
- the type of the converter- Parameters:
cls
- the class to find a converter for, not null- Returns:
- the converter, not null
- Throws:
IllegalArgumentException
- if the input class is nullRuntimeException
- (or subclass) if there is a developer error in one of the converters- Since:
- 3.0
-
findConverter
Finds a suitable converter for the type.This returns an instance of
StringConverter
for the specified class. This is designed for user code where theClass
object generics is known.The search algorithm first searches the registered converters. It then searches for
ToString
andFromString
annotations on the specified class, class hierarchy or immediate parent interfaces. Finally, it handlesEnum
instances.- Type Parameters:
T
- the type of the converter- Parameters:
cls
- the class to find a converter for, not null- Returns:
- the converter, not null
- Throws:
RuntimeException
- (or subclass) if no converter found
-
findConverterNoGenerics
Finds a suitable converter for the type with open generics.This returns an instance of
StringConverter
for the specified class. This is designed for framework usage where theClass
object generics are unknown'?'. The returned type is declared withObject
instead of '?' to allow theToStringConverter
to be invoked.The search algorithm first searches the registered converters. It then searches for
ToString
andFromString
annotations on the specified class, class hierarchy or immediate parent interfaces. Finally, it handlesEnum
instances.- Parameters:
cls
- the class to find a converter for, not null- Returns:
- the converter, using
Object
to avoid generics, not null - Throws:
RuntimeException
- (or subclass) if no converter found- Since:
- 1.5
-
findTypedConverter
Finds a suitable converter for the type.This returns an instance of
TypedStringConverter
for the specified class. This is designed for user code where theClass
object generics is known.The search algorithm first searches the registered converters. It then searches for
ToString
andFromString
annotations on the specified class, class hierarchy or immediate parent interfaces. Finally, it handlesEnum
instances.The returned converter may be queried for the effective type of the conversion. This can be used to find the best type to send in a serialized form.
NOTE: Changing the method return type of
findConverter(Class)
would be source compatible but not binary compatible. As this is a low-level library, binary compatibility is important, hence the addition of this method.- Type Parameters:
T
- the type of the converter- Parameters:
cls
- the class to find a converter for, not null- Returns:
- the converter, not null
- Throws:
RuntimeException
- (or subclass) if no converter found- Since:
- 1.7
-
findTypedConverterNoGenerics
Finds a suitable converter for the type with open generics.This returns an instance of
TypedStringConverter
for the specified class. This is designed for framework usage where theClass
object generics are unknown'?'. The returned type is declared withObject
instead of '?' to allow theToStringConverter
to be invoked.The search algorithm first searches the registered converters. It then searches for
ToString
andFromString
annotations on the specified class, class hierarchy or immediate parent interfaces. Finally, it handlesEnum
instances.The returned converter may be queried for the effective type of the conversion. This can be used to find the best type to send in a serialized form.
NOTE: Changing the method return type of
findConverterNoGenerics(Class)
would be source compatible but not binary compatible. As this is a low-level library, binary compatibility is important, hence the addition of this method.- Parameters:
cls
- the class to find a converter for, not null- Returns:
- the converter, using
Object
to avoid generics, not null - Throws:
RuntimeException
- (or subclass) if no converter found- Since:
- 1.7
-
findFromStringConverter
Finds a suitable from-string converter for the type.This returns an instance of
FromStringConverter
for the specified class. In most cases this is identical tofindConverter(Class)
. However, it is permitted to have aFromString
annotation without aToString
annotation, and this method handles that use case.- Type Parameters:
T
- the type of the converter- Parameters:
cls
- the class to find a converter for, not null- Returns:
- the converter, not null
- Throws:
RuntimeException
- (or subclass) if no converter found
-
registerFactory
Registers a converter factory.This will be registered ahead of all existing factories.
No new factories may be registered for the global singleton.
- Parameters:
factory
- the converter factory, not null- Throws:
IllegalStateException
- if trying to alter the global singleton- Since:
- 1.5
-
register
Registers a converter for a specific type.The converter will be used for subclasses unless overidden.
No new converters may be registered for the global singleton.
- Type Parameters:
T
- the type of the converter- Parameters:
cls
- the class to register a converter for, not nullconverter
- the String converter, not null- Throws:
IllegalArgumentException
- if the class or converter are nullIllegalStateException
- if trying to alter the global singleton
-
register
public <T> void register(Class<T> cls, ToStringConverter<T> toString, FromStringConverter<T> fromString) Registers a converter for a specific type using two separate converters.This method registers a converter for the specified class. It is primarily intended for use with JDK 1.8 method references or lambdas:
sc.register(Distance.class, Distance::toString, Distance::parse);
The converter will be used for subclasses unless overidden.No new converters may be registered for the global singleton.
- Type Parameters:
T
- the type of the converter- Parameters:
cls
- the class to register a converter for, not nulltoString
- the to String converter, typically a method reference, not nullfromString
- the from String converter, typically a method reference, not null- Throws:
IllegalArgumentException
- if the class or converter are nullIllegalStateException
- if trying to alter the global singleton- Since:
- 1.3
-
registerMethods
public <T> void registerMethods(Class<T> cls, String toStringMethodName, String fromStringMethodName) Registers a converter for a specific type by method names.This method allows the converter to be used when the target class cannot have annotations added. The two method names must obey the same rules as defined by the annotations
ToString
andFromString
. The converter will be used for subclasses unless overidden.No new converters may be registered for the global singleton.
For example,
convert.registerMethods(Distance.class, "toString", "parse");
- Type Parameters:
T
- the type of the converter- Parameters:
cls
- the class to register a converter for, not nulltoStringMethodName
- the name of the method converting to a string, not nullfromStringMethodName
- the name of the method converting from a string, not null- Throws:
IllegalArgumentException
- if the class or method name are null or invalidIllegalStateException
- if trying to alter the global singleton
-
registerMethodConstructor
Registers a converter for a specific type by method and constructor.This method allows the converter to be used when the target class cannot have annotations added. The two method name and constructor must obey the same rules as defined by the annotations
ToString
andFromString
. The converter will be used for subclasses unless overidden.No new converters may be registered for the global singleton.
For example,
convert.registerMethodConstructor(Distance.class, "toString");
- Type Parameters:
T
- the type of the converter- Parameters:
cls
- the class to register a converter for, not nulltoStringMethodName
- the name of the method converting to a string, not null- Throws:
IllegalArgumentException
- if the class or method name are null or invalidIllegalStateException
- if trying to alter the global singleton
-
toString
Returns a simple string representation of the object.
-