如果第一个参数为true,则必须在函数中传递第二个参数

a_s*_*ber 1 arguments variadic-functions kotlin

我有自定义的Kotlin函数:

fun getActiveCartTest(isAsync: Boolean = false, vararg callback: Callback<Cart> ): TransportResponse? {
...
}
Run Code Online (Sandbox Code Playgroud)

它具有一个默认参数(isAsync)和一个可选vararg)回调参数。我可以像这样从Java调用此函数:

1.  TransportResponse transportResponse = TransportService.INSTANCE.getActiveCartTest();
2.  TransportResponse transportResponse = TransportService.INSTANCE.getActiveCartTest(false);
3.  TransportResponse transportResponse = TransportService.INSTANCE.getActiveCartTest(true);
4.  TransportService.INSTANCE.getActiveCartTest(true, new DefaultRestClientCallback<Cart>() {
            @Override
            public void onTransportResponse(@NotNull TransportResponse transportResponse) {

            }
        });
Run Code Online (Sandbox Code Playgroud)

很好,可以。但是,当我使用此调用时:

TransportResponse transportResponse = TransportService.INSTANCE.getActiveCartTest(true);
Run Code Online (Sandbox Code Playgroud)

我收到一个编译错误。

我的意思是。当客户端想要调用函数的异步调用时,getActiveCartTest必须使用两个参数:isAsync AND callback

如您在我的函数中所见,getActiveCartTest客户端可以省略第二个参数(callback)。不对

我需要第一个param isAsync = true,那么用户还必须传递第二个param回调。如果是第一个参数,isAsync = false则用户可以省略第二个参数(callback

在科特林有可能吗?

Dan*_*iel 9

与其尝试使任何人都无法理解的代码,不如将函数划分为getActiveCartTestSyncgetActiveCartTestAsync。您可以通过使用反射来实现所需的功能,但是您会在没有任何理由的情况下使代码复杂得多。