簡體   English   中英

將 function 從 java 轉換為 kotlin ZC31B32364CE19CA8FCD150A417ECCE

[英]Convert one function from java to kotlin android

我在 JAVA 中開發了一個應用程序。 現在我已經為 firebase 相關調用打了一個 function。 和完美的工作。 但現在我也想將 function 轉換為 kotlin。 但我對如何在 kotlin 中使用 function 調用感到困惑。

Java的Function:

public static void firebaseAuth(FirebaseAuth auth, AuthCredential authCredential, Function<Object, Void> delegate) {
    auth.signInWithCredential(authCredential).addOnCompleteListener(task -> {
        if (task.isSuccessful()) {
            delegate.apply(auth.getCurrentUser());
        } else {
            delegate.apply(task.getException());
        }
    });
}

在 Java 中使用此 Function:

FireSignInHelper.firebaseAuth(mFireAuth, authCredential, o -> {

            if (o instanceof Exception) {
                signIn_UnSuccessful((Exception) o);
            } else if (o instanceof FirebaseUser) {
                FirePacket firePacket = new FirePacket();
                firePacket.setProvider(provider);
                firePacket.setToken(((FirebaseUser) o).getUid());
                firePacket.setFirebaseUser((FirebaseUser) o);
                signIn_Successful(firePacket);
            }
            return null;
        });

在 Kotlin 中轉換的 Function:

fun firebaseAuth(auth: FirebaseAuth,
    authCredential: AuthCredential?,
    delegate: Function<Any?, Void?>
) {
    auth.signInWithCredential(authCredential!!)
        .addOnCompleteListener { task: Task<AuthResult?> ->
            if (task.isSuccessful) {
                delegate.apply(auth.currentUser)
            } else {
                delegate.apply(task.exception)
            }
        }
}

在 kotlin 中使用轉換后的 function:

我想知道這個答案。 因為我已經嘗試通過 Android studio 但編譯器沒有正確轉換。 所以我想知道如何在kotlin中使用這個function。

提前致謝。

IntelliJ 轉換代碼的方式是正確的。 然而, Function接口在 kotlin 中沒有用,因為函數是一等公民。 請參閱文檔中的高階函數示例。

我想你只是想做這樣的事情

fun firebaseAuth(
    auth: FirebaseAuth,
    authCredential: AuthCredential?,
    listener: (Any) -> Unit
) {
    auth.signInWithCredential(authCredential!!)
        .addOnCompleteListener {
            listener.invoke(
                if (it.isSuccessful) auth.currentUser 
                else it.exception
            )                
        }
}

接着

FireSignInHelper.firebaseAuth(mFireAuth, authCredential) { 
     when(it){
        is FirebaseUser -> { ... }
        is Exception -> { ... }
     }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM