在Kotlin Lambda表达式中覆盖多个接口方法

sop*_*hia 3 lambda android interface kotlin

说我有Callbacks两个方法的接口onCurrentLocationonError

    public interface Callbacks {

        void onCurrentLocation(ClientLocation location);

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

还有一个在其构造函数中采用此接口的类,例如:

public MyLocationClient(Callbacks callbacks) {...}
Run Code Online (Sandbox Code Playgroud)

现在,在Kotlin中,我应该能够以这种方式实例化MyLocationClient:

val myLocationClient = MyLocationClient(
                    { location: ClientLocation ->
                          updateClientLocation(location)
                    },
                    {})
Run Code Online (Sandbox Code Playgroud)

如果没有,为什么不呢?

我看到的行为是:当接口只有一种方法时,此对象的构造可以很好地编译。但是,一旦我向中添加了更多方法Callbacks,编译器就会抱怨

“类型不匹配。必需:回调!找到:(ClientLocation)->单位”

编辑:删除了空检查,location因为它与问题无关。

Mar*_*een 5

因此,您要在不是功能接口(它们只有一个方法)的匿名类上创建实例,因此它类似于:

val myLocationClient = MyLocationClient(object : Callbacks {

        override fun onCurrentLocation(location : ClientLocation?){
            location?.run{ updateLocation(this) }
        }

        override fun onError(){ // should you not handle errors? }
    })
Run Code Online (Sandbox Code Playgroud)