Reflective functions and properties
Reflection doesn't stop with classes and objects. Most of the Kotlin system can be accessed, and that includes functions and properties. Let's start with a class that contains some member functions, an extension function for Double, and a couple of properties:
class Rocket() {
var lat: Double = 0
var long: Double = 0
fun explode() {
println("Boom")
}
fun setCourse(lat: Double, long: Double) {
require(lat.isValid())
require(long.isValid())
this.lat = lat
this.long = long
}
fun Double.isValid() = Math.abs(this) <= 180
}
The extension function is used to check that the Double parameter is a valid latitude or longitude whenever we invoke setCourse.
The next function is similar to the function for printing constructors from earlier, and prints out the names of each...