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)
在科特林有可能吗?
与其尝试使任何人都无法理解的代码,不如将函数划分为getActiveCartTestSync和getActiveCartTestAsync。您可以通过使用反射来实现所需的功能,但是您会在没有任何理由的情况下使代码复杂得多。
| 归档时间: |
|
| 查看次数: |
50 次 |
| 最近记录: |