我有一個現有的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語句返回的?你覺得什麼是好的,什麼是壞的?創造一些東西時你有沒有美感?當你只是做另一件隨機事物時,進步並不是什麼進展,當你覺得它是正確的時候,進步就是這樣。製造更多麻煩不是進步。 –