Interface Unwrappable

All Known Subinterfaces:
Backoff, BlockingWebClient, Client<I,O>, ClientFactory, ConnectionPoolListener, GraphqlService, GrpcService, HttpClient, HttpService, HttpServiceWithRoutes, RequestContextStorage, RpcClient, RpcService, RpcServiceWithRoutes, Service<I,O>, ServiceWithRoutes<I,O>, THttpClient, TransientHttpService, TransientRpcService, TransientService<I,O>, WebClient
All Known Implementing Classes:
AbstractBackoff, AbstractCircuitBreakerClient, AbstractConcurrencyLimitingClient, AbstractGraphqlService, AbstractHttpService, AbstractRetryingClient, AbstractThrottlingService, AbstractUnaryGrpcService, AbstractUnsafeUnaryGrpcService, AbstractUnwrappable, AuthService, BackoffWrapper, BraveClient, BraveService, CircuitBreakerClient, CircuitBreakerRpcClient, ConcurrencyLimitingClient, ConnectionPoolListenerAdapter, ConnectionPoolListenerWrapper, ContentPreviewingClient, ContentPreviewingService, CookieClient, CoroutineContextService, CorsService, DecodingClient, DecodingService, DecoratingClient, DecoratingClientFactory, DecoratingService, DocService, EncodingService, FileService, HealthCheckService, JettyService, LoggingClient, LoggingRpcClient, LoggingService, ManagementService, MetricCollectingClient, MetricCollectingRpcClient, MetricCollectingService, OAuth2Client, PrometheusExpositionService, RedirectService, RequestContextStorageWrapper, ResteasyService, RetryingClient, RetryingRpcClient, SimpleDecoratingClient, SimpleDecoratingHttpClient, SimpleDecoratingHttpService, SimpleDecoratingRpcClient, SimpleDecoratingRpcService, SimpleDecoratingService, ThriftCallService, ThrottlingRpcService, ThrottlingService, THttpService, TomcatService, UserClient

public interface Unwrappable
Provides a way to unwrap an object in decorator pattern, similar to down-casting in an inheritance pattern.
  • Method Summary

    Modifier and Type
    Method
    Description
    default <T> T
    as(Class<T> type)
    Unwraps this object into the object of the specified type.
    default Unwrappable
    Unwraps this object and returns the object being decorated.
  • Method Details

    • as

      @Nullable default <T> T as(Class<T> type)
      Unwraps this object into the object of the specified type. Use this method instead of an explicit downcast. For example:
      
       class Foo {}
      
       class Bar<T> extends AbstractWrapper<T> {
           Bar(T delegate) {
               super(delegate);
           }
       }
      
       class Qux<T> extends AbstractWrapper<T> {
           Qux(T delegate) {
               super(delegate);
           }
       }
      
       Qux qux = new Qux(new Bar(new Foo()));
       Foo foo = qux.as(Foo.class);
       Bar bar = qux.as(Bar.class);
       
      Parameters:
      type - the type of the object to return
      Returns:
      the object of the specified type if found, or null if not found.
    • unwrap

      default Unwrappable unwrap()
      Unwraps this object and returns the object being decorated. If this Unwrappable is the innermost object, this method returns itself. For example:
      
       class Foo implements Unwrappable {}
      
       class Bar<T extends Unwrappable> extends AbstractUnwrappable<T> {
           Bar(T delegate) {
               super(delegate);
           }
       }
      
       class Qux<T extends Unwrappable> extends AbstractUnwrappable<T> {
           Qux(T delegate) {
               super(delegate);
           }
       }
      
       Foo foo = new Foo();
       assert foo.unwrap() == foo;
      
       Bar<Foo> bar = new Bar<>(foo);
       assert bar.unwrap() == foo;
      
       Qux<Bar<Foo>> qux = new Qux<>(bar);
       assert qux.unwrap() == bar;
       assert qux.unwrap().unwrap() == foo;