从Java迁移到kotlin - SAM封装挑战?

时间:2018-03-16 15:45:04

标签: kotlin

我有一个Java SAM接口和我想在kotlin中翻译的实现:

public interface CallbackWrapper {
    <T> Consumer<T> wrap(Consumer<T> consumer);
}

public class MainThreadWrapper implements CallbackWrapper {

    @Override
    public  <T> Consumer<T> wrap(Consumer<T> consumer) {
        return i -> {
            Handler handler = new Handler(Looper.getMainLooper());
            handler.post(() -> consumer.accept(i));
        };
    }
}

当然我们的项目可以处理java代码,但我的神经元不能。 ;)

任何帮助都将受到赞赏。

帕特里斯

1 个答案:

答案 0 :(得分:1)

等效的Kotlin类看起来像这样:

class MainThreadWrapper : CallbackWrapper {
    override fun <T> wrap(consumer: Consumer<T>): Consumer<T> =
        Consumer { t ->
            val handler = Handler(Looper.mainLooper)
            handler.post { consumer.accept(t) }
        }
}

请注意,代码使用SAM conversions两次,它们仅适用于在Java中声明的接口。对于匿名接口实现,Kotlin替代方案为function typesobject expressions

相关问题