CodeReviewでのいくつかの推奨事項の後、C#からJavaに切り替えました。そのため、LWJGLを調べていたときに覚えていたことの1つは、への呼び出しはすべてDisplay、Display.create()メソッドが呼び出されたのと同じスレッドで実行する必要があるということでした。これを思い出して、私はこのようなクラスを作成しました。
public class LwjglDisplayWindow implements DisplayWindow {
private final static int TargetFramesPerSecond = 60;
private final Scheduler _scheduler;
public LwjglDisplayWindow(Scheduler displayScheduler, DisplayMode displayMode) throws LWJGLException {
_scheduler = displayScheduler;
Display.setDisplayMode(displayMode);
Display.create();
}
public void dispose() {
Display.destroy();
}
@Override
public int getTargetFramesPerSecond() { return TargetFramesPerSecond; }
@Override
public Future<Boolean> isClosed() {
return _scheduler.schedule(() -> Display.isCloseRequested());
}
}
このクラスを書いている間にisClosed()、を返すというメソッドを作成したことに気付くでしょうFuture<Boolean>。このディスパッチ私の機能Schedulerは何もラッパー以上ではありませんインターフェース(ScheduledExecutorService。書き込み中scheduleの方法SchedulerIのいずれかを使用できることに気づいた私Supplier<T>の引数かCallable<T>に渡される関数を表現するために、引数が。ScheduledExecutorService含まれていませんでしたオーバーライドしますSupplier<T>が、ラムダ式() -> Display.isCloseRequested()は実際にとの両方Callable<bool> と 型互換性があることに気付きましたSupplier<bool>。
私の質問は、意味的にもそうでない場合も、これら2つの間に違いはありますか?もしそうなら、それは何ですか?