i'm working on a very ugly function, for casting a...
# codereview
t
i'm working on a very ugly function, for casting a string to a user provided type:
Copy code
fun <T> getAs(clazz: Class<T>, converter: ((String) -> Any)? = null): T {
    return if (converter != null) {
        convert(clazz) { converter.invoke(value) } as T
    } else when (clazz) {
        Int::class.java -> convert(clazz) { value.toInt() } as T
        Integer::class.java -> convert(clazz) { value.toInt() } as T
        Double::class.java -> convert(clazz) { value.toDouble() } as T
        Long::class.java -> convert(clazz) { value.toLong() } as T
        Date::class.java -> convert(clazz) { Date(value) } as T
        else -> throw IllegalArgumentException("Can't auto-cast to $clazz. Add a converter as a second argument.")
    }
}

private fun convert(clazz: Class<*>, converter: () -> Any): Any = try {
        converter.invoke()
    } catch (e: Exception) {
        ...
    }