0
respostas

Type function com sobrecarga de invoke()

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.