我有一个现有的Java类ThreadUtils
与方法every
,看起来像:转换线程/ Runnable接口的实现从Java到科特林
public class ThreadUtil {
public static Thread every(int seconds, Runnable r) {
Thread t = new Thread(() -> {
while(true) {
r.run();
try {
Thread.sleep(1000 * seconds);
} catch (InterruptedException e) {
return;
}
}
});
t.start();
return t;
}
}
和我想要将其转换为科特林。我有点挂在Runnable封闭上。这将失败,一个坏return
:
fun every(seconds: Int, r: Runnable): Thread {
val t = Thread({
while (true) {
r.run()
try {
Thread.sleep((1000 * seconds).toLong())
} catch (e: InterruptedException) {
return // ERROR: This function must return a value of type Thread
}
}
})
t.start()
return t
}
我也试着拉了Runnable出来只是为了帮助自己独立的事情,但是这也无法以同样的方式:
fun every(seconds: Int, r: Runnable): Thread {
val internalRunnable = Runnable {
while (true) {
r.run()
try {
Thread.sleep((1000 * seconds).toLong())
} catch (e: InterruptedException) {
return // ERROR: This function must return a value of type Thread
}
}
}
val t = Thread(internalRunnable)
t.start()
return t
}
我如何能实现一个@FunctionalInterface
或类似样式的封闭/拉姆达不会尝试return
来自其中正在定义的功能?
我与一些所谓的聪明人发明(又名项目)的日常工作,这让我的工作作为一个恶梦,你混uneccesserly技术,毁了你的一个开发,和其他人的生活这样做。为什么你不能使用java?是不是看起来很愚蠢,必须告诉语言,你是从一个线程写回线程中的return语句返回的?你觉得什么是好的,什么是坏的?创造一些东西时你有没有美感?当你只是做另一件随机事物时,进步并不是什么进展,当你觉得它是正确的时候,进步就是这样。制造更多麻烦不是进步。 –