Подтвердить что ты не робот

Функция статического расширения на Java-классе

Можно ли добавить функцию статического расширения, аналогичную добавлению функции расширения к сопутствующему объекту. Я попробовал

public fun ByteBuffer.Companion.invoke(capacity: Int): ByteBuffer

но это вызвало неразрешенные ссылки: Companion. Я бы предположил, что это потому, что Companion не определен в Java-коде.

4b9b3361

Ответ 1

Краткий ответ: в данный момент это невозможно. Но может быть поддержано в будущем.

Вы правы, у классов Java нет сопутствующих объектов. Вы можете добавить расширения только к классам (будут отображаться в экземплярах класса) или к объявленным объектам-компаньонам (будут выглядеть как статические в классе):

class A { companion object }
class B { companion object Test }

fun A.Companion.foo() { println("Test A.foo") }
fun B.Test.foo() { println("Test B.foo") }

fun main(args: Array<String>) {
    A.foo() // prints «Test A.foo»
    B.foo() // prints «Test B.foo»
}