Olá pessoal,
Na minha exploração das type functions eu consegui me valer do polimorfismo criando uma classe Soma que recebe qualquer Number e retorna um Double:
class Soma : (Number, Number) -> Double {
override fun invoke(p1: Number, p2: Number): Double {
return (p1.toDouble() + p2.toDouble())
}
E as chamadas dessa type function:
val somaInt: (Int, Int) -> Double = Soma()
val somaDouble: (Double, Double) -> Double = Soma()
val somaQualquerNumber: (Number, Number) -> Double = Soma()
println(somaInt(10, 20)) //resultado: 30.0
println(somaDouble(10.0, 30.0)) // resultado: 40.0
println(somaQualquerNumber(35.0, 0b1111)) // resultado: 50.0
Mas uma coisa que não ficou clara para mim é como usar as sobrecargas do método invoke(), i.e., nesse caso, eu imaginava que poderia criar diferentes assinaturas, uma para cada formato de entrada.
Obrigado e bons estudos a todos e a todas.