@SuppressWarnings("unchecked")
	public <T> String format(final T value) {
		if (value == null) {
			return null;
		}

		var formatter = (Function<T, String>)formatters.get(value.getClass());
		if (formatter == null) {
			formatter = (Function<T, String>)formatters.get(Object.class);
			if (formatter == null) {
				formatter = Object::toString;
			}
		}

		return formatter.apply(value);
	}
Formats the given {@code value} to a string. If the given input
{@code value} is {@code null}, the formatter method also returns
{@code null}. If no formatter is defined for the given input type, the
{@link Object#toString()} value is returned.

@param value the string value to convert
@return the formatted string value
@param <T> the source type
@throws RuntimeException if the {@code value} can't be converted. This is
        the exception thrown by the registered converter function.
jenetics.incubator/src/main/java/io/jenetics/incubator/csv/Formatter.java