CodeReview bazı üzerinden bazı öneriler sonra C # Java geçiş yapıyorum. Yani, LWJGL içine bakarken, hatırladığım bir şey, her çağrı yöntemin çağrıldığı Displayaynı iş parçacığı üzerinde yürütülmesi gerektiğiydi Display.create(). Bunu hatırlayarak biraz benzeyen bir sınıf çırptım.
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());
}
}
Bu sınıfı yazarken, a isClosed()döndüren bir yöntem oluşturduğumu fark edeceksiniz Future<Boolean>. Bu harekât benim için bir işlev Schedulerhiçbir şey bir etrafında bir sarıcı daha fazladır arayüzüne ( ScheduledExecutorService. Yazarken scheduleüzerinde yöntemini Schedulerben de bir kullanabileceği fark I Supplier<T>argüman veya bir Callable<T>geçirilen işlevi temsil etmek argüman. ScheduledExecutorServiceBir içermiyordu için geçersiz kılın, Supplier<T>ancak lambda ifadesinin () -> Display.isCloseRequested()aslında hem Callable<bool> ve ile uyumlu olduğunu fark ettim Supplier<bool>.
Benim sorum şu, bu ikisi arasında anlamsal veya başka bir fark var mı?