Package com.linecorp.armeria.common.util
Interface Unwrappable
- All Known Subinterfaces:
Backoff,Client<I,O>,ClientFactory,ConnectionPoolListener,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,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,MetricCollectingClient,MetricCollectingRpcClient,MetricCollectingService,PrometheusExpositionService,RedirectService,RequestContextStorageWrapper,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> Tas(Class<T> type)Unwraps this object into the object of the specifiedtype.default Unwrappableunwrap()Unwraps this object and returns the object being decorated.
-
Method Details
-
as
Unwraps this object into the object of the specifiedtype. 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
typeif found, ornullif not found.
-
unwrap
Unwraps this object and returns the object being decorated. If thisUnwrappableis 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;
-