CodeReview에서 일부 추천을받은 후 C #에서 Java로 전환했습니다. 따라서 LWJGL을 살펴볼 때 기억 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
온 방법 Scheduler
내가 중 하나 사용할 수있는 것으로 나타났습니다 I Supplier<T>
인수 또는Callable<T>
에 전달되는 기능을 나타내는 인수하는 것은. ScheduledExecutorService
를 포함하지 않았다 대한 오버라이드 (override) Supplier<T>
하지만 난 람다 식을 것으로 나타났습니다 () -> Display.isCloseRequested()
실제로 모두 호환 유형 Callable<bool>
과 Supplier<bool>
.
내 질문은 의미 상 또는 다른 방법으로 그 둘 사이에 차이가 있습니까? 그렇다면 그렇다면 무엇을 준수해야합니까?