Custom delegation
So far in this chapter, we have seen the standard delegations available with Kotlin. However, Kotlin does allow us to write our own custom delegates, to suit our custom needs.
For example, in the program, where we checked for the Even
with Delegates.vetoable
, we could only discard the value assignment, but there's no way to automatically assign the next even number to the variable.
In the following program, we used makeEven
, a custom delegate which would automatically assign the next even number if an odd number is passed to the assignment, otherwise if an even number is passed to the assignment, it would pass that.
Have a look at the following program:
var myEven:Int by makeEven(0) { property, oldValue, newValue, wasEven -> println("${property.name} $oldValue -> $newValue, Even:$wasEven") } fun main(args: Array<String>) { myEven = 6 println("myEven:$myEven") myEven = 3 println("myEven:$myEven") myEven = 5 println("myEven...