definicion - Cómo crear un futuro completo en Java
textarea java netbeans (5)
¿Cuál es la mejor manera de construir un futuro completo en Java? Implementé mi propio CompletedFuture
continuación, pero esperaba algo como esto que ya existe.
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();
}
}
Apache Commons Lang define una implementación similar llamada ConstantFuture, puede obtenerla llamando:
Future<T> future = ConcurrentUtils.constantFuture(T myValue);
En Java 6 puedes usar lo siguiente:
Promise<T> p = new Promise<T>();
p.resolve(value);
return p.getFuture();
En Java 8 puede usar el CompletableFuture integrado:
Future future = CompletableFuture.completedFuture(value);
Encontré una clase muy similar a la tuya en Java rt.jar
com.sun.xml.internal.ws.util.CompletedFuture
También le permite especificar una excepción que se puede lanzar cuando se invoca get (). Simplemente configúrelo como nulo si no desea lanzar una excepción.
Guava define Futures.immediateFuture(value)
, que hace el trabajo.