我有自定义的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
)
在科特林有可能吗?
答案 0 :(得分:9)
与其尝试制作任何人都无法理解的代码,不如将您的函数分为getActiveCartTestSync
和getActiveCartTestAsync
。您可以通过使用反射来实现所需的功能,但是却使代码变得更加复杂,没有任何理由。