Stati c методы в Kotlin как stati c методы в Java - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь создать метод c stati в Kotlin, который позволяет правильно взаимодействовать с Java.

Контекст: я хочу передать ссылку java.lang.reflect.Method на org.springframework.expression.spel.support.StandardEvaluationContext#registerFunction поэтому добавьте пользовательскую функциональность в язык выражений Spring.

Я создал объект-компаньон:

companion object {
    @JvmStatic
    fun foo(): Boolean = true
}

И получу ссылку через

Companion::foo.javaMethod!!

или

Companion.javaClass.getMethod("foo").modifiers

Однако, когда я вызываю Modifier.isStatic для результата, он возвращает false, и когда я пытаюсь вычислить выражение с помощью зарегистрированной функции, я также получаю

org.springframework.expression.spel.SpelEvaluationException:
EL1039E: Only static methods can be called via function references.
The method '…$Companion.foo' referred to by name 'foo' is not static.

Как я могу это исправить?

1 Ответ

1 голос
/ 16 апреля 2020

Работает для меня так:

class C {
    companion object {
        @JvmStatic
        fun foo(): Boolean = true
    }
}

val method = C::class.java.getDeclaredMethod("foo")

Modifier.isStatic(method.modifiers) // true

Обратите внимание, что C::class.java и C.javaClass - это разные вещи: первый возвращает Class<C>, а второй возвращает Class<C.Companion>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...