public val <T : Any> T.javaClass: Class<T>
Это свойство расширения.Работает в основном так же, как функция расширения (фактически компилятор генерирует функцию получения расширения для любого типа, унаследованного от Any
).
Более простой пример, без обобщений:
val String.withPrefix: String
get() = "_$this"
fun test() {
println("Hello".withPrefix) // prints "_Hello"
}
Еще один пример- теперь для универсального типа:
val <T: Number> T.hexValue: String
get() = convertToHex(this)
fun main(args: Array<String>) {
val number: Double = 10.0
println("Hex value of $number is ${number.hexValue}")
}
Конструкция, которую вы спрашиваете, довольно странная, поскольку соединяет как универсальную, так и расширенную функцию.Но, как вы можете видеть, на самом деле это просто очень простая конструкция - выглядит просто странно.
Подробнее о расширениях: https://kotlinlang.org/docs/reference/extensions.html#extension-properties
Подробнее о генериках: https://kotlinlang.org/docs/reference/generics.html