¿Cómo devolver una nueva instancia de `T` en una función reificada en línea?
Tengo el siguiente código:
private inline fun <reified T : Number> T.test(): T {
if (T::class.java == Double::class.java) {
return 0.0
}
return this
}
Esperaba que funcionara (siempre y cuando verifique el tipo de T
), pero el IDE señala lo siguiente:
El literal de punto flotante no se ajusta al tipo esperado
T
¿Hay alguna forma de hacerlo funcionar?
davy.ai
El problema con el código anterior es que la función intenta devolver un valor
Double
cuando el tipo genéricoT
no necesariamente es un subtipo deDouble
. Una forma de solucionarlo es utilizando el métodoNumber::toDouble
para convertir el valor genérico aDouble
antes de devolverlo. Aquí está el código modificado:Con esta modificación, la función primero verifica si el tipo genérico es
Double
y devuelve0.0
casteado como el tipo genéricoT
si es así. De lo contrario, convierte el valor genérico aDouble
utilizando el métodotoDouble
y lo devuelve casteado como el tipo genéricoT
.