J'essaie de convertir ce code Java en Kotlin:
public class HeaderInterceptor implements Interceptor {
@Override public Response intercept(Chain chain) throws IOException {
return null;
}
}
Le problème est que lorsque je mets en œuvre les méthodes, je reçois quelque chose comme
class JsonHeadersInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain?): Response? {
throw UnsupportedOperationException()
}
}
La seule information que j'ai trouvée concernant les exceptions de projection dans Kotlin est THIS .
En plus de supprimer le point d'interrogation, car il n'est pas nécessaire, pourquoi ne gère-t-il pas le paramètre IOException
de la même manière? Quelle est la meilleure approche pour gérer cette situation?
En Kotlin, il n'y a pas d'exception vérifiée , aucune exception ne doit être déclarée et vous n'êtes pas obligé d'attraper une exception, bien que vous puissiez bien sûr le faire. Même lorsque vous dérivez d'une classe Java, il n'est pas nécessaire de déclarer des exceptions à une méthode throws
.
@Throws(SomeException::class)
est juste un moyen d'interopérabilité Java, il permet d'écrire une fonction avec throws
en signature Java, de sorte qu'il soit possible (et nécessaire) de gérer l'exception.
Au lieu de cela, les exceptions d'API publiques doivent être documentées dans KDoc avec @throws
tag .
En Java, vous avez quelque chose comme ça
void foo() throws IOException{
throw new IOException();
}
Mais dans Kotlin, vous devez ajouter une annotation comme ci-dessous
@Throws(IOException::class)
fun foo() {
throw IOException()
}
Source kotlinlang.org