Следующий код определяет 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 также возвращает строку.