@SuppressWarnings("unchecked") private static <T> T convert(final String string, final Class<T> type) { try { if (Path.class.isAssignableFrom(type)) { return (T) Paths.get(string); } return Conversion.convert(string, type); } catch (final Throwable ex) { throw new Exception("'" + string + "' is not a valid " + type.getSimpleName(), ex); } }
@Nullable private static Object convertObject(final Object object, final Class<?> clazz) { if (object instanceof String) { return convertString((String) object, clazz); } else if (object instanceof Number) { return convertNumber((Number) object, clazz); } else if (object instanceof Boolean) { return convertBoolean((Boolean) object, clazz); } else if (object instanceof Enum<?>) { return convertEnum((Enum<?>) object, clazz); } else if (object instanceof File) { return convertFile((File) object, clazz); } return null; }
@Nullable private static Object convertNumber(final Number number, final Class<?> clazz) { if (clazz.isAssignableFrom(String.class)) { return number.toString(); } else if (clazz == Integer.class || clazz == int.class) { return Integer.valueOf(number.intValue()); } else if (clazz == Long.class || clazz == long.class) { return Long.valueOf(number.longValue()); } else if (clazz == Double.class || clazz == double.class) { return Double.valueOf(number.doubleValue()); } else if (clazz == Float.class || clazz == float.class) { return Float.valueOf(number.floatValue()); } else if (clazz == Short.class || clazz == short.class) { return Short.valueOf(number.shortValue()); } else if (clazz == Byte.class || clazz == byte.class) { return Byte.valueOf(number.byteValue()); } else if (clazz == BigDecimal.class) { return toBigDecimal(number); } else if (clazz == BigInteger.class) { return toBigInteger(number); } else if (clazz == AtomicInteger.class) { return new AtomicInteger(number.intValue()); } else if (clazz == AtomicLong.class) { return new AtomicLong(number.longValue()); } return null; }
@SuppressWarnings("unchecked") @Nullable public static <T> T convert(@Nullable final Object object, final Class<T> clazz) throws IllegalArgumentException { if (object == null) { Objects.requireNonNull(clazz); return null; } if (clazz.isInstance(object)) { return (T) object; } final T result = (T) convertObject(object, clazz); if (result != null) { return result; } throw new IllegalArgumentException("Unsupported conversion of " + object + " to " + clazz); }
return Boolean.valueOf(string); } else if (clazz == Integer.class || clazz == int.class) { return Integer.valueOf((int) toLong(string)); } else if (clazz == Long.class || clazz == long.class) { return Long.valueOf(toLong(string)); } else if (clazz == Double.class || clazz == double.class) { return Double.valueOf(string); return Float.valueOf(string); } else if (clazz == Short.class || clazz == short.class) { return Short.valueOf((short) toLong(string)); } else if (clazz == Byte.class || clazz == byte.class) { return Byte.valueOf((byte) toLong(string)); } else if (clazz == BigDecimal.class) { return new BigDecimal(string);
public static Parameters forProperties(final Properties properties, @Nullable final String prefix) { final Properties p = properties; final String pr = prefix != null ? prefix : ""; final Algorithm algorithm = Algorithm .valueOf(p.getProperty(pr + "algorithm").toUpperCase()); final int numLabels = Integer.parseInt(p.getProperty(pr + "numLabels")); final float c = Float.parseFloat(p.getProperty(pr + "c")); final Float bias = Conversion.convert(p.getProperty(pr + "bias"), Float.class); final Boolean dual = Conversion.convert(p.getProperty(pr + "dual"), Boolean.class); final Float gamma = Conversion.convert(p.getProperty(pr + "gamma"), Float.class); final Float coeff = Conversion.convert(p.getProperty(pr + "coeff"), Float.class); final Integer degree = Conversion.convert(p.getProperty(pr + "degree"), Integer.class); float[] weights = null; if (p.containsKey(pr + "weight.0")) { weights = new float[numLabels]; for (int i = 0; i < numLabels; ++i) { weights[i] = Conversion.convert(p.getProperty(pr + "weight." + i), Float.class); } } return new Parameters(algorithm, numLabels, weights, c, bias, dual, gamma, coeff, degree); }