shaktiman_droid
05/08/2021, 7:24 PMsealed class Response {
object Success : Response()
data class Failure(val error: String) : Response()
}
object Test {
@JvmStatic
fun returnSealed(): Response {
return Response.Success
}
}
On Java side, caller would have to use instanceOf
if-else logic. Is there a way to make it better for them ?
Response response = Test.returnSealed();
if (response instanceof Response.Failure) {
((Response.Failure) response).getError();
} else {
// handle success
}
randomcat
05/08/2021, 7:30 PMonSuccessOrElse(() -> blah, err -> blah)
method to Response
randomcat
05/08/2021, 7:30 PMonSuccess
and onError
shaktiman_droid
05/08/2021, 7:32 PMrandomcat
05/08/2021, 7:33 PMshaktiman_droid
05/08/2021, 7:35 PMrandomcat
05/08/2021, 7:36 PMshaktiman_droid
05/08/2021, 7:38 PMrandomcat
05/08/2021, 7:40 PMSupplier<T>
and a Function<String, T>
thenshaktiman_droid
05/08/2021, 7:45 PMsealed class Response {
abstract fun <T> onSuccessOrElse(onSuccess: () -> T, onError: (String) -> T)
object Success : Response() {
override fun <T> onSuccessOrElse(onSuccess: () -> T, onError: (String) -> T) {
onSuccess()
}
}
data class Failure(val error: String) : Response() {
override fun <T> onSuccessOrElse(onSuccess: () -> T, onError: (String) -> T) {
onError(error)
}
}
}
randomcat
05/08/2021, 7:45 PMrandomcat
05/08/2021, 7:45 PMshaktiman_droid
05/08/2021, 7:46 PMUnit.INSTANCE
from Javarandomcat
05/08/2021, 7:49 PMshaktiman_droid
05/08/2021, 8:15 PMfun interface SuccessHandler {
fun invoke()
}
fun interface FailureHandler {
fun invoke(error: String)
}
sealed class Response {
abstract fun <T> onSuccessOrElse(onSuccess: SuccessHandler, onError: FailureHandler)
object Success : Response() {
override fun <T> onSuccessOrElse(onSuccess: SuccessHandler, onError: FailureHandler) {
onSuccess.invoke()
}
}
data class Failure(val error: String) : Response() {
override fun <T> onSuccessOrElse(onSuccess: SuccessHandler, onError: FailureHandler) {
onError.invoke(error)
}
}
}
shaktiman_droid
05/08/2021, 8:16 PMresponse.onSuccessOrElse(() -> {
// Handle success
}, error -> {
// Handle failure with error
});
shaktiman_droid
05/08/2021, 8:16 PMrandomcat
05/08/2021, 8:16 PMshaktiman_droid
05/17/2021, 6:54 PMrandomcat
05/17/2021, 8:07 PMrandomcat
05/17/2021, 8:08 PMinvoke
methods do return Unit in Kotlin, they just get generated to return void
in Java because the return type is not genericshaktiman_droid
05/17/2021, 8:09 PMrandomcat
05/17/2021, 8:09 PMSince ourthis could be more explicit, but I'm just a pedantmethod in the interface doesn't returninvoke
like ourUnit
, our Java code doesn't need to return anything anymore.Lambda
randomcat
05/17/2021, 8:10 PMshaktiman_droid
05/17/2021, 8:11 PMrandomcat
05/17/2021, 8:11 PM