次のようなThreadUtils
メソッドを持つ既存の Java クラスがあります。every
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;
}
}
そして、それをKotlinに変換しようとしています。私は 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