Unlike java, you can extend the functionality of a class without creating a subclass to it. This is done by extensions. By using extensions, you can extend both the properties and methods.
How to add extension function to a type?
Prefix the function name with receiver type.
Syntax
Type.functionName(arguments) : returnType = definition
Let me explain with detailed example.
class Arithmetic {
fun sum(a: Int, b: Int) = a + b
fun sub(a: Int, b: Int) = a - b
}
I can add new function that multiply two numbers to the Arithmetic class using extensions like below.
fun Arithmetic.mul(a: Int, b: Int) = a * b
Find below working application.
HelloWorld.kt
class Arithmetic {
fun sum(a: Int, b: Int) = a + b
fun sub(a: Int, b: Int) = a - b
}
fun main(args: Array) {
fun Arithmetic.mul(a: Int, b: Int) = a * b
var obj = Arithmetic()
var sumOf10And20 = obj.sum(10, 20)
var subOf10And20 = obj.sub(10, 20)
var mulOf10And20 = obj.mul(10, 20)
println("Sum of 10 and 20 $sumOf10And20")
println("Subtraction of 10 and 20 $subOf10And20")
println("Multiplication of 10 and 20 $mulOf10And20")
}
Output
Sum of 10 and 20 30
Subtraction of 10 and 20 -10
Multiplication of 10 and 20 200
How to add extension property?
It is like adding extension function to a type. Remember Extension property cannot be initialized because it has no backing field, their behavior is defined only by using getter and setter methods.
Ex
val Arithmetic.PI: Double
get() = 3.14
Find the below working application.
HelloWorld.kt
class Arithmetic {
fun sum(a: Int, b: Int) = a + b
fun sub(a: Int, b: Int) = a - b
}
class Test {
val Arithmetic.PI: Double
get() = 3.14
fun getPI(): Double {
var obj = Arithmetic()
return obj.PI
}
}
fun main(args: Array) {
var obj = Test()
println("Value of PI : ${obj.getPI()}")
}
Output
Value of PI : 3.14
Previous Next Home
This post first appeared on Java Tutorial : Blog To Learn Java Programming, please read the originial post: here