Я бы хотел переписать часть своего кода на Kotlin.Сначала я вставил рабочий код, чтобы показать источник.
Я попытался
Ниже приведен рабочий отрывок, написанный на Java:
Function1.class (часть фреймворка):
public interface Function1<T1, R> {
R call(T1 var1);
}
Authmanager.class:
public boolean isAuthed() {
Boolean isAuthed = getWithAuthPolicyManager(
authPolicyManager -> authPolicyManager.getBoolean(IS_AUTHED)
);
if (isAuthed != null) {
return isAuthed;
} else {
return false;
}
}
public <T> T getWithAuthPolicyManager(@NonNull Function1<AuthManager, T> function) {
Objects.requireNonNull(function);
synchronized (AUTH_POLICY_LOCK) {
try {
openAuthPolicyManager();
return function.call(authPolicyManager);
} catch (OpenFailureException | EncryptionError e) {
LOGGER.error("Error:", e);
return null;
} finally {
authPolicyManager.close();
}
}
}
Я хотел бы переписать его в Kotlin, но не могу:
Authmanager.kt
fun isAuthed(): Boolean {
val isAuthed =
getWithAuthPolicyManager<Boolean>({
authPolicyManager -> authPolicyManager.getBoolean(IS_AUTHED)
})
return isAuthed ?: false
}
fun <T> getWithAuthPolicyManager(function: Function1<AuthManager, T>) : T? {
synchronized (AUTH_POLICY_LOCK) {
return try {
openAuthPolicyManager();
return function.call(authPolicyManager);
} catch (OpenFailureException | EncryptionError e) {
LOGGER.error("Error", e);
null;
} finally {
authPolicyManager.close();
null
}
}
}
На самом деле, я просто скопировал Java-код в класс Kotlin для автоматического преобразования в Kotlin.Тем не менее, линтер говорит:
Type mismatch.
Required: Function1<AuthManager, Boolean>
Found: (AuthManager) -> Boolean!
к этой строке getWithAuthPolicyManager<Boolean>({authPolicyManager -> authPolicyManager.getBoolean(IS_AUTHED)})
in fun isAuthed()
.
У вас есть идеи, как это можно исправить?