将一个函数从java转换为kotlin android

将一个函数从java转换为kotlin android,java,android,kotlin,Java,Android,Kotlin,我用JAVA开发了一个应用程序。现在,我为firebase相关调用创建了一个函数。而且工作得很好。但是现在我想把这个函数也转换成kotlin。但我对如何在kotlin中使用该函数调用感到困惑 Java的功能: public static void firebaseAuth(FirebaseAuth auth, AuthCredential authCredential, Function<Object, Void> delegate) { auth.signInWithCre

我用JAVA开发了一个应用程序。现在,我为firebase相关调用创建了一个函数。而且工作得很好。但是现在我想把这个函数也转换成kotlin。但我对如何在kotlin中使用该函数调用感到困惑

Java的功能:

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());
        }
    });
}
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;
        });
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中转换的函数:

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());
        }
    });
}
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;
        });
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)
            }
        }
}
fun firebaseAuth(auth:firebaseAuth,
authCredential:authCredential?,
代表:职能
) {
auth.signiWithCredential(authCredential!!)
.addOnCompleteListener{task:task->
如果(任务成功){
delegate.apply(auth.currentUser)
}否则{
委托.应用(任务.异常)
}
}
}
在kotlin中使用转换后的函数:

我想知道这个答案。因为我试过Android studio,但编译器没有正确转换。所以我想知道如何在kotlin中使用这个函数


提前感谢。

IntelliJ转换代码的方式是正确的。 然而,
函数
接口在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 -> { ... }
     }
}

IntelliJ转换代码的方式是正确的。 然而,
函数
接口在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 -> { ... }
     }
}

请参考这篇文章获得答案。我已经试过了,但没有正确转换。这就是我把它贴在这里的原因。请参考这篇文章以获得答案。我已经试过了,但没有正确转换。这就是我在这里发布它的原因。我如何使用函数的this
delegate:Function
第三个参数?为什么?这是实现回调或函数指针的Java方式。我的代码向您展示了在Kotlin中执行此操作的方法。好的,我将尝试处理您的答案并与您保持联系。非常感谢。我如何使用this
delegate:Function
Function的第三个参数?为什么?这是实现回调或函数指针的Java方式。我的代码向您展示了在Kotlin中执行此操作的方法。好的,我将尝试处理您的答案并与您保持联系。非常感谢。