【发布时间】:2019-12-11 10:23:05
【问题描述】:
我正在努力将我的 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 中实现相同的功能,我们将不胜感激。
【问题讨论】:
-
小提示。如果您使用来自 Jetbrains(也创建了 Kotlin)的 IntelliJ IDEA,您可以将粘贴的 Java 代码复制到 Kotlin 文件中,它会自动为您转换。结果并不总是最漂亮的,但它会是 Kotlin。
标签: java android kotlin lambda