Je suis passé à Java à partir de C # après quelques recommandations de la part de CodeReview. Donc, quand je regardais LWJGL, une chose dont je me souvenais était que chaque appel à Display
devait être exécuté sur le même thread que la Display.create()
méthode était invoquée. En me souvenant de cela, j'ai concocté un cours qui ressemble un peu à ça.
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());
}
}
En écrivant cette classe, vous remarquerez que j'ai créé une méthode appelée isClosed()
qui renvoie a Future<Boolean>
. Cela envoie une fonction à mon Scheduler
interface (qui n'est rien de plus qu'un wrapper autour d'un ScheduledExecutorService
. Lors de l'écriture de la schedule
méthode sur le Scheduler
j'ai remarqué que je pouvais soit utiliser un Supplier<T>
argument ou un Callable<T>
argument pour représenter la fonction transmise. ScheduledExecutorService
Ne contenait pas de remplacer pour Supplier<T>
mais j'ai remarqué que l'expression lambda () -> Display.isCloseRequested()
est en fait compatible avec les deux types Callable<bool>
et Supplier<bool>
.
Ma question est, y a-t-il une différence entre ces deux, sémantiquement ou autrement - et si oui, qu'est-ce que c'est, pour que je puisse y adhérer?