首页 > 解决方案 > 在 kotlin 中创建 Lambda 函数

问题描述

我正在努力将我的 java 代码转换为 kotlin 代码,但我陷入了无法转换我之前编写的 lambda 函数的地步

 class Utils {


    interface Callback {
        void onResult(MediaCodecInfo[] infos);
    }

    static final class EncoderFinder extends AsyncTask<String, Void, MediaCodecInfo[]> {
        private Callback func;

        EncoderFinder(Callback func) {
            this.func = func;
        }

        @Override
        protected MediaCodecInfo[] doInBackground(String... mimeTypes) {
            return findEncodersByType(mimeTypes[0]);
        }

        @Override
        protected void onPostExecute(MediaCodecInfo[] mediaCodecInfos) {
            func.onResult(mediaCodecInfos);
        }
    }

    static void findEncodersByTypeAsync(String mimeType, Callback callback) {
        new EncoderFinder(callback).execute(mimeType);
    }

}

这就是我在 Java 的 MainActivity 中使用它的方式

 public class MainActivity extends Activity {


 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

          Utils.findEncodersByTypeAsync("abc", infos -> {

              useInfos(infos);
          });
     }
}

我在 Kotlin 中的 Utils 课程

object Utils {


    internal interface Callback {
        fun onResult(infos: Array<MediaCodecInfo?>?)
    }


    internal class EncoderFinder(func : Callback) : AsyncTask<String,Void,Array<MediaCodecInfo?>?>(){

        var func : Callback = func


        override fun doInBackground(vararg params: String?): Array<MediaCodecInfo?>? {
            return findEncodersByType(params[0])
        }

        override fun onPostExecute(result: Array<MediaCodecInfo?>?) {
            func.onResult(result)
        }

    }

    internal fun findEncodersByTypeAsync(mimeType: String?, callback: Callback){
        EncoderFinder(callback).execute(mimeType)
    }

}

我怎样才能在 kotlin 中仅在 MainActivity 中实现相同的功能,我们将不胜感激。

标签: javaandroidkotlinlambda

解决方案


Utils.findEncodersByTypeAsync("abc") { useInfos(it) }

推荐阅读