Kiedy programując w javie chciałbym rozszerzyć funkcjonalność jakiejś standardowej klasy (np. String), skończyłoby się to stworzeniem osobnego pakietu "utils". Zamieściłbym w nim klasę z metodą statyczną. Na przykład gdybym potrzebowałbym usuwać ostatni znak z napisu, powstałoby coś takiego:
package pl.com.android.utils
class StringUtils {
static String removeLastChar(String str) {
return str.substring(0, str.length()-1)
}
}
//użycie
//najpierw potrzebny import:
import pl.com.android.utils.StringUtils
//... potem gdzieś w klasie
StringUtils.removeLastChar("string z którego zostanie usunięty ostatni znak")
Trzeba utworzyć nowy typ, no i czytelność kodu jest słaba...
Kotlin, poprzez funkcję rozszerzającą pozwala to uprościć:
fun String.removeLastChar(): String {
if(this.length == 0)
return this
return this.substring(0, str.length-1)
}
//użycie
"string z którego zostanie usunięty ostatni znak".removeLastChar()
Dzięki czemu możemy rozszerzać funkcjonalności istniejących klas nie tworząc nowych.