web-dev-qa-db-fra.com

jette Exception dans une méthode avec Kotlin

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?

16
cesards

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 .

47
hotkey

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

0
Radesh