这样的小例子,在 Java 中我有:
public static void getPlaceName(GoogleApiClient mGoogleApiClient, String placeId, @NonNull PlaceNameCallback callback) {
Places.GeoDataApi.getPlaceById(mGoogleApiClient, placeId)
.setResultCallback(places -> {
if (places.getStatus().isSuccess() && places.getCount() > 0) {
Place myPlace = places.get(0);
callback.onPlaceDetected(String.valueOf(myPlace.getName())); // set place name
}
places.release();
});
}
public interface PlaceNameCallback {
void onPlaceDetected(String name);
}
然后我可以将地名设置为 TextView:
getPlaceName(mGoogleApiClient, arrivalId[0], name -> textArrival.setText(name));
请告诉我如何在 Kotlin 上设置这样的地名?
这个东西叫做 SAM(单一抽象方法),它是关于 Java 世界的。在当前版本的 Kotlin 中,如果您的接口是在 Kotlin 中声明的,则不能像那样使用 SAM。为此,他们使用高阶函数而不是接口。而且,据我所知,在 Kotlin 1.3 版本中,我们可能会得到这种可能性(此信息取自对来自 JetBrains 的 Kotlin 开发人员之一的采访,如果您熟悉俄语,您可以在这里看到这篇文章:https://habrahabr.ru/company/redmadrobot/blog/351516/ )
顺便说一句,您可以在 Kotin 中使用 SAM,但前提是您的接口是在 Java 中声明的。对于您的示例,它应该如下所示:
getPlaceName(mGoogleApiClient, arrivalId[0], PlaceNameCallback { textArrival.setText(it)})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句