Questions regarding Reflections: I was playing ar...
# getting-started
j
Questions regarding Reflections: I was playing around with reflections, reading the documentation. Q1.
Copy code
import kotlin.reflect.KFunction1

fun isOdd(x: Int) = x % 2 == 1
fun isOdd(s: String) = s == "brillig" || s == "slithy" || s == "tove"

fun main() {
    val numbers = listOf(1, 2, 3)
    println(numbers::class.qualifiedName)
    println(numbers.filter(::isOdd)) // refers to isOdd(x: Int) among the overloaded functions, from the context

    val strings = listOf("Hello", "brillig", "World", "tove")
    println(strings.filter(::isOdd)) // refers to isOdd(x: String)


    val n = IntRange(1, 10).toList()
    println(n::class.qualifiedName)

    val predicate: KFunction1<Int, Boolean> = ::isOdd
    // val predicate: (Int) -> Boolean = ::isOdd // then below codes would not work
    println(predicate)
    println(predicate.returnType)
    println(predicate.parameters)
    println(predicate.parameters[0].type)
    println(predicate.parameters[0].also { println(it.kind) }.name)
}
Is it correct to say that 
::isOdd
 actually returns the value of type 
KFunction1<Int, Boolean>
 which is a subtype of the function type 
(Int) -> Boolean
? Q2. While I was searching in the api documentation, I found out that 
KFunction1
, doesn’t have a page for it. Is there a reason? And in the page for KFunction
Copy code
interface KFunction<out R> : KCallable<R>, Function<R>
Why does 
KFunction
 NOT have the input parameter types in the definition, and only have the output type? Q3. What is the difference between 
KFunction
 and 
KCallable
? I’m not so sure what a callable means in Kotlin. Is it correct to say a “callable” = “function or property”, a superset of function? (P.S. are constructors also function? Or is it a callable, but different from a function?)