Reflection doesn't end 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.0
var long: Double = 0.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...