public abstract class KafkaFuture<T> extends Object implements Future<T>
CompletionStage
It is possible to obtain a CompletionStage
from a
KafkaFuture
instance by calling toCompletionStage()
.
If converting whenComplete(BiConsumer)
or thenApply(BaseFunction)
to
CompletableFuture.whenComplete(java.util.function.BiConsumer)
or
CompletableFuture.thenApply(java.util.function.Function)
be aware that the returned
KafkaFuture
will fail with an ExecutionException
, whereas a CompletionStage
fails
with a CompletionException
.
Modifier and Type | Class and Description |
---|---|
static interface |
KafkaFuture.BaseFunction<A,B>
A function which takes objects of type A and returns objects of type B.
|
static interface |
KafkaFuture.BiConsumer<A,B>
A consumer of two different types of object.
|
static class |
KafkaFuture.Function<A,B>
Deprecated.
Since Kafka 3.0. Use the
KafkaFuture.BaseFunction functional interface. |
Constructor and Description |
---|
KafkaFuture() |
Modifier and Type | Method and Description |
---|---|
static KafkaFuture<Void> |
allOf(KafkaFuture<?>... futures)
Returns a new KafkaFuture that is completed when all the given futures have completed.
|
abstract boolean |
cancel(boolean mayInterruptIfRunning)
If not already completed, completes this future with a CancellationException.
|
protected abstract boolean |
complete(T newValue)
If not already completed, sets the value returned by get() and related methods to the given
value.
|
static <U> KafkaFuture<U> |
completedFuture(U value)
Returns a new KafkaFuture that is already completed with the given value.
|
protected abstract boolean |
completeExceptionally(Throwable newException)
If not already completed, causes invocations of get() and related methods to throw the given
exception.
|
abstract T |
get()
Waits if necessary for this future to complete, and then returns its result.
|
abstract T |
get(long timeout,
TimeUnit unit)
Waits if necessary for at most the given time for this future to complete, and then returns
its result, if available.
|
abstract T |
getNow(T valueIfAbsent)
Returns the result value (or throws any encountered exception) if completed, else returns
the given valueIfAbsent.
|
abstract boolean |
isCancelled()
Returns true if this CompletableFuture was cancelled before it completed normally.
|
abstract boolean |
isCompletedExceptionally()
Returns true if this CompletableFuture completed exceptionally, in any way.
|
abstract boolean |
isDone()
Returns true if completed in any fashion: normally, exceptionally, or via cancellation.
|
abstract <R> KafkaFuture<R> |
thenApply(KafkaFuture.BaseFunction<T,R> function)
Returns a new KafkaFuture that, when this future completes normally, is executed with this
futures's result as the argument to the supplied function.
|
abstract <R> KafkaFuture<R> |
thenApply(KafkaFuture.Function<T,R> function) |
abstract CompletionStage<T> |
toCompletionStage()
Gets a
CompletionStage with the same completion properties as this KafkaFuture . |
abstract KafkaFuture<T> |
whenComplete(KafkaFuture.BiConsumer<? super T,? super Throwable> action)
Returns a new KafkaFuture with the same result or exception as this future, that executes the given action
when this future completes.
|
public static <U> KafkaFuture<U> completedFuture(U value)
public static KafkaFuture<Void> allOf(KafkaFuture<?>... futures)
public abstract CompletionStage<T> toCompletionStage()
CompletionStage
with the same completion properties as this KafkaFuture
.
The returned instance will complete when this future completes and in the same way
(with the same result or exception).
Calling toCompletableFuture()
on the returned instance will yield a CompletableFuture
,
but invocation of the completion methods (complete()
and other methods in the complete*()
and obtrude*()
families) on that CompletableFuture
instance will result in
UnsupportedOperationException
being thrown. Unlike a "minimal" CompletableFuture
,
the get*()
and other methods of CompletableFuture
that are not inherited from
CompletionStage
will work normally.
If you want to block on the completion of a KafkaFuture you should use
get()
, get(long, TimeUnit)
or getNow(Object)
, rather then calling
.toCompletionStage().toCompletableFuture().get()
etc.
public abstract <R> KafkaFuture<R> thenApply(KafkaFuture.BaseFunction<T,R> function)
thenApply
or it may be invoked by the thread that
completes the future.public abstract <R> KafkaFuture<R> thenApply(KafkaFuture.Function<T,R> function)
public abstract KafkaFuture<T> whenComplete(KafkaFuture.BiConsumer<? super T,? super Throwable> action)
whenComplete
or it may be invoked by the thread that
completes the future.action
- the action to preformprotected abstract boolean complete(T newValue)
protected abstract boolean completeExceptionally(Throwable newException)
public abstract boolean cancel(boolean mayInterruptIfRunning)
public abstract T get() throws InterruptedException, ExecutionException
get
in interface Future<T>
InterruptedException
ExecutionException
public abstract T get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
get
in interface Future<T>
InterruptedException
ExecutionException
TimeoutException
public abstract T getNow(T valueIfAbsent) throws InterruptedException, ExecutionException
public abstract boolean isCancelled()
isCancelled
in interface Future<T>
public abstract boolean isCompletedExceptionally()