2016-04-10 22 views
9

Sto cercando di convertire questo codice Java per Kotlin:throws Exception in un metodo con Kotlin

public class HeaderInterceptor implements Interceptor { 
    @Override public Response intercept(Chain chain) throws IOException { 
    return null; 
    } 
} 

Il problema è, quando ho implementare i metodi, ottengo qualcosa come

class JsonHeadersInterceptor : Interceptor { 
    override fun intercept(chain: Interceptor.Chain?): Response? { 
     throw UnsupportedOperationException() 
    } 
} 

Le uniche informazioni che ho trovato parlando di generare eccezioni in Kotlin sono THIS.

Una parte dalla rimozione del punto interrogativo, perché non è necessaria, perché non gestisce lo IOException allo stesso modo? Qual è l'approccio migliore per gestire questa situazione?

+0

Cosa intendi per "gestire IOException"? Tutte le eccezioni sono eccezioni di runtime in Kotlin e quindi non devono essere dichiarate nella clausola throws. E in realtà, anche il codice Java non ha bisogno di dichiarare IOException nella sua clausola throws, dal momento che non genera mai IOException. –

risposta

26

In Kotlin, there's no checked exceptions, non si devono dichiarare eccezioni e non si è costretti a rilevare alcuna eccezione, anche se, naturalmente, è possibile. Anche quando si deriva da una classe Java, non è necessario dichiarare eccezioni a un metodo throws.

@Throws(SomeException::class) è solo un'interfaccia di interoperabilità Java, consente di scrivere una funzione con throws in firma Java, in modo che in Java sia possibile (e necessario) gestire l'eccezione.

Invece, le eccezioni API pubbliche devono essere documentate in KDoc with @throws tag.