Какая особенность kotlin может использоваться в качестве замены перехвата метода через прокси-серверы Java

В java, если я хочу перехватить вызовы метода в классе, я могу использоватьProxy.newProxyInstance() и предоставить InvocationHandler реализация invoke().

Я видел, что в kotlin вы можете использовать делегированные свойства для перехвата доступа к свойствам.

Есть ли какая-нибудь особенность kotlin, которая могла бы использоваться для обеспечения аналогичной функциональности для методов?

1 ответ

Решение

Kotlin не имеет стандартного и унифицированного способа создания Proxies. Вы все еще можете использоватьProxy.newProxyInstance() при использовании платформы K/JVM, но имейте в виду, что компилятор Kotlin сгенерирует / переименует метод (вы можете использовать @JvmNameчтобы контролировать это). На платформе JS есть похожая функция (здесь документ MDN), и у вас есть@JsName для обработки переименования метода.

Что касается Native, то (насколько мне известно) нет способа сделать это, поскольку отражение не реализовано.

Цель делегирования не в том, чтобы предоставить альтернативу прокси, но в некоторых случаях они могут сойти с рук.

Существует запрос функции для этой функции здесь, но не получило много внимания

Другие вопросы по тегам