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
,ConnectionPoolLoggingListener
,ContentPreviewingClient
,ContentPreviewingService
,CorsService
,DecodingClient
,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> T
as(Class<T> type)
Unwraps this object into the object of the specifiedtype
.default Unwrappable
unwrap()
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
type
if found, ornull
if not found.
-
unwrap
Unwraps this object and returns the object being decorated. If thisUnwrappable
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;
-