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 function defined in this class. The appropriately named property...