[英]Create Lambda function in kotlin
我正在努力将我的 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 中实现相同的目标,将不胜感激。
Utils.findEncodersByTypeAsync("abc") { useInfos(it) }
https://medium.com/mindorks/lambda-function-in-kotlin-22ded595298
参考此信息,您可以清楚地了解使用带参数和不带参数的 lambda 函数
你必须像这样改变你的 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: (Array<MediaCodecInfo?>?) -> Unit){
EncoderFinder(callback as Callback).execute(mimeType)
}
}
你可以像这样在 MainActivity 中调用它:
class MainActivity : AppCompatActivity() {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Utils.findEncodersByTypeAsync("abc", infos -> {
useInfos(infos);
})
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.