@Nullable
    default <T> T as(Class<T> type) {
        requireNonNull(type, "type");
        return type.isInstance(this) ? type.cast(this) : null;
    }
Unwraps this object into the object of the specified {@code type}.
Use this method instead of an explicit downcast. For example:
<pre>{@code
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);
}</pre>

@param type the type of the object to return
@return the object of the specified {@code type} if found, or {@code null} if not found.
core/src/main/java/com/linecorp/armeria/common/util/Unwrappable.java