AbstractCheckedFuture
Date: 2016-05-24

com.google.common.util.concurrent

## Class AbstractCheckedFuture<V,X extends java.lang.Exception>

- java.lang.Object
- - com.google.common.collect.ForwardingObject
  - - com.google.common.util.concurrent.ForwardingFuture<V>
    - - com.google.common.util.concurrent.ForwardingListenableFuture<V>
      - - com.google.common.util.concurrent.ForwardingListenableFuture.SimpleForwardingListenableFuture<V>
        - - com.google.common.util.concurrent.AbstractCheckedFuture<V,X>

- All Implemented Interfaces:
    CheckedFuture<V,X>, ListenableFuture<V>, java.util.concurrent.Future<V>

      @Beta
      public abstract class AbstractCheckedFuture<V,X extends java.lang.Exception>
      extends ForwardingListenableFuture.SimpleForwardingListenableFuture<V>
      implements CheckedFuture<V,X>

  A delegating wrapper around a `ListenableFuture` that adds support for the `checkedGet()` and `checkedGet(long, TimeUnit)` methods.
  Since:
    1.0

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class com.google.common.util.concurrent.ForwardingListenableFuture

      `ForwardingListenableFuture.SimpleForwardingListenableFuture<V>`

    - ### Nested classes/interfaces inherited from class com.google.common.util.concurrent.ForwardingFuture

      `ForwardingFuture.SimpleForwardingFuture<V>`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `AbstractCheckedFuture(ListenableFuture<V> delegate)` Constructs an `AbstractCheckedFuture` that wraps a delegate.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `V` | `checkedGet()` Exception checking version of `Future.get()` that will translate `InterruptedException`, `CancellationException` and `ExecutionException` into application-specific exceptions.
    `V` | `checkedGet(long timeout, java.util.concurrent.TimeUnit unit)` Exception checking version of `Future.get(long, TimeUnit)` that will translate `InterruptedException`, `CancellationException` and `ExecutionException` into application-specific exceptions.
    `protected abstract X` | `mapException(java.lang.Exception e)` Translates from an `InterruptedException`, `CancellationException` or `ExecutionException` thrown by `get` to an exception of type `X` to be thrown by `checkedGet`.

    - ### Methods inherited from class com.google.common.util.concurrent.ForwardingListenableFuture.SimpleForwardingListenableFuture

      `delegate`

    - ### Methods inherited from class com.google.common.util.concurrent.ForwardingListenableFuture

      `addListener`

    - ### Methods inherited from class com.google.common.util.concurrent.ForwardingFuture

      `cancel, get, get, isCancelled, isDone`

    - ### Methods inherited from class com.google.common.collect.ForwardingObject

      `toString`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface com.google.common.util.concurrent.ListenableFuture

      `addListener`

    - ### Methods inherited from interface java.util.concurrent.Future

      `cancel, get, get, isCancelled, isDone`

- - ### Constructor Detail

    - #### AbstractCheckedFuture

          protected AbstractCheckedFuture(ListenableFuture<V> delegate)

      Constructs an `AbstractCheckedFuture` that wraps a delegate.

  - ### Method Detail

    - #### mapException

          protected abstract X mapException(java.lang.Exception e)

      Translates from an `InterruptedException`, `CancellationException` or `ExecutionException` thrown by `get` to an exception of type `X` to be thrown by `checkedGet`. Subclasses must implement this method.

      If `e` is an `InterruptedException`, the calling `checkedGet` method has already restored the interrupt after catching the exception. If an implementation of `mapException(Exception)` wishes to swallow the interrupt, it can do so by calling `Thread.interrupted()`.

      Subclasses may choose to throw, rather than return, a subclass of `RuntimeException` to allow creating a CheckedFuture that throws both checked and unchecked exceptions.

    - #### checkedGet

          public V checkedGet()
                       throws X extends java.lang.Exception

      Exception checking version of `Future.get()` that will translate `InterruptedException`, `CancellationException` and `ExecutionException` into application-specific exceptions.

      This implementation calls `ForwardingFuture.get()` and maps that method's standard exceptions to instances of type `X` using `mapException(java.lang.Exception)`.

      In addition, if `get` throws an `InterruptedException`, this implementation will set the current thread's interrupt status before calling `mapException`.

      Specified by:
        `checkedGet` in interface `CheckedFuture<V,X extends java.lang.Exception>`
      Returns:
        the result of executing the future.
      Throws:
        `X` - if `ForwardingFuture.get()` throws an `InterruptedException`, `CancellationException`, or `ExecutionException`
        `X extends java.lang.Exception`

    - #### checkedGet

          public V checkedGet(long timeout,
                     java.util.concurrent.TimeUnit unit)
                       throws java.util.concurrent.TimeoutException,
                              X extends java.lang.Exception

      Exception checking version of `Future.get(long, TimeUnit)` that will translate `InterruptedException`, `CancellationException` and `ExecutionException` into application-specific exceptions. On timeout this method throws a normal `TimeoutException`.

      This implementation calls `ForwardingFuture.get(long, TimeUnit)` and maps that method's standard exceptions (excluding `TimeoutException`, which is propagated) to instances of type `X` using `mapException(java.lang.Exception)`.

      In addition, if `get` throws an `InterruptedException`, this implementation will set the current thread's interrupt status before calling `mapException`.

      Specified by:
        `checkedGet` in interface `CheckedFuture<V,X extends java.lang.Exception>`
      Returns:
        the result of executing the future.
      Throws:
        `X` - if `ForwardingFuture.get()` throws an `InterruptedException`, `CancellationException`, or `ExecutionException`
        `java.util.concurrent.TimeoutException` - if retrieving the result timed out.
        `X extends java.lang.Exception`