Was ist der beste Weg, um eine abgeschlossene Zukunft in Java zu konstruieren? Ich habe meine eigene CompletedFuture
unten implementiert , hoffte aber, dass so etwas bereits existiert.
public class CompletedFuture<T> implements Future<T> {
private final T result;
public CompletedFuture(final T result) {
this.result = result;
}
@Override
public boolean cancel(final boolean b) {
return false;
}
@Override
public boolean isCancelled() {
return false;
}
@Override
public boolean isDone() {
return true;
}
@Override
public T get() throws InterruptedException, ExecutionException {
return this.result;
}
@Override
public T get(final long l, final TimeUnit timeUnit) throws InterruptedException, ExecutionException, TimeoutException {
return get();
}
}
Antworten:
Apache Commons Lang definiert eine ähnliche Implementierung, die ConstantFuture heißt. Sie erhalten sie, indem Sie Folgendes aufrufen:
quelle
In Java 8 können Sie die integrierte CompletableFuture verwenden:
quelle
Guave definiert
Futures.immediateFuture(value)
, wer den Job macht.quelle
druckt "foo" aus;
Sie können auch eine Zukunft haben, die eine Ausnahme auslöst, wenn get () aufgerufen wird:
quelle
Ich habe eine sehr ähnliche Klasse wie Ihre in der Java-Datei rt.jar gefunden
com.sun.xml.internal.ws.util.CompletedFuture
Hier können Sie auch eine Ausnahme angeben, die beim Aufrufen von get () ausgelöst werden kann. Setzen Sie das einfach auf null, wenn Sie keine Ausnahme auslösen möchten.
quelle
com.sun.*
ist es keine gute Idee , etwas im Paket zu verwenden. Diese Klassen werden im Allgemeinen als internes Implementierungsdetail betrachtet und können sich je nach Java-Version ändern.In Java 6 können Sie Folgendes verwenden:
quelle