Для @AjahnCharles, в итоге я решил использовать класс Result<T>
, который работал очень хорошо.
В java у меня может быть:
public class VersionCheckStatus {
@Expose
String supported;
@Expose
String reason;
public VersionCheckStatus(String supported, String reason) {
this.supported = supported;
this.reason = reason;
}
public String getSupported() {
return supported;
}
public void setSupported(String supported) {
this.supported = supported;
}
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
/**
* Provides enum translation for easily checking the status of the response object
*
* @return enum status
*/
public VersionCheckManager.Status getEnumStatus() {
if (supported.equals(VersionCheckManager.Status.YES.toString())) {
return VersionCheckManager.Status.YES;
} else if (supported.equals(VersionCheckManager.Status.NO.toString())) {
return VersionCheckManager.Status.NO;
}
return VersionCheckManager.Status.NO;
}
}
. Затем определите функцию kotlin, например:
override fun establishCompatibility(callback: (Result<VersionCheckStatus>) -> Unit) {
...
}
, которую можно использовать со сложением следующим образом:
manager.establishCompatibility { versionCheckStatus ->
var textToShow = ""
versionCheckStatus.fold({ successResult ->
textToShow = when (successResult.enumStatus) {
VersionCheckManager.Status.YES -> "Yes:\n ${successResult.reason}"
VersionCheckManager.Status.NO -> No:\n ${successResult.reason}"
null -> "Unknown"
}
}, { throwable ->
textToShow = "Exception occurred:\n $throwable"
})
Toast.makeText(this, textToShow, Toast.LENGTH_LONG).show()
}