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

时间:2019-09-11 07:45:35

标签: kotlin arguments variadic-functions

我有自定义的Kotlin函数:

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

它具有一个默认参数(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) {

            }
        });

很好,它可以工作。 但是,当我使用此呼叫时:

TransportResponse transportResponse = TransportService.INSTANCE.getActiveCartTest(true);

出现编译错误。

我的意思是。当客户想要调用功能getActiveCartTest async 调用时,它必须使用两个参数:isAsync AND {{ 1}}。

您可以在我的函数callback中看到,客户端可以省略第二个参数(getActiveCartTest)。这是不正确的。

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

在科特林有可能吗?

1 个答案:

答案 0 :(得分:9)

与其尝试制作任何人都无法理解的代码,不如将您的函数分为getActiveCartTestSyncgetActiveCartTestAsync。您可以通过使用反射来实现所需的功能,但是却使代码变得更加复杂,没有任何理由。