Почему изменение, казалось бы, нерелевантного кода помогает kotlin вывести переменные типа - PullRequest
0 голосов
/ 26 мая 2020

Следующий код определяет SigningKeyResolverAdapter для jjwt библиотеки

  private val parser = Jwts.parserBuilder().setSigningKeyResolver(object : SigningKeyResolverAdapter() {
        override fun resolveSigningKey(header: JwsHeader<*>, claims: Claims): Key {
            return runBlocking {
                keyRetriever.getPublicKey(header.keyId)
            }
        }
    }).build()

Компиляция kotlin завершается неудачно со следующей ошибкой:

Невозможно вывести параметр типа T в var!>

JwsHeader.keyId: String! Ни одна из следующих замен

получатель: JwsHeader аргументы: ()

получатель: JwsHeader!> Аргументы: () получатель:

аргументы JwsHeader: () получатель:

JwsHeader!> Аргументы: () получатель:

JwsHeader!>!> Аргументы: () получатель:

JwsHeader!> Аргументы: () может

к получателю: JwsHeader <*> arguments: ()

Когда строка

keyRetriever.getPublicKey (header.keyId)

заменяется на

keyRetriever.getPublicKey (header ["kid"] as String)

все работает.

Я не понимаю, почему это изменение имеет значение. header.keyId также возвращает строку.

...