public abstract class io.vertx.servicediscovery.types.AbstractServiceReference<T> implements io.vertx.servicediscovery.ServiceReference
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: io.vertx.servicediscovery.types.AbstractServiceReference
  super_class: java.lang.Object
{
  private final io.vertx.servicediscovery.ServiceDiscovery discovery;
    descriptor: Lio/vertx/servicediscovery/ServiceDiscovery;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final io.vertx.servicediscovery.Record record;
    descriptor: Lio/vertx/servicediscovery/Record;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  protected T service;
    descriptor: Ljava/lang/Object;
    flags: (0x0004) ACC_PROTECTED
    Signature: TT;

  protected final io.vertx.core.Vertx vertx;
    descriptor: Lio/vertx/core/Vertx;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  public void <init>(io.vertx.core.Vertx, io.vertx.servicediscovery.ServiceDiscovery, io.vertx.servicediscovery.Record);
    descriptor: (Lio/vertx/core/Vertx;Lio/vertx/servicediscovery/ServiceDiscovery;Lio/vertx/servicediscovery/Record;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=4, args_size=4
        start local 0 // io.vertx.servicediscovery.types.AbstractServiceReference this
        start local 1 // io.vertx.core.Vertx vertx
        start local 2 // io.vertx.servicediscovery.ServiceDiscovery discovery
        start local 3 // io.vertx.servicediscovery.Record record
         0: .line 50
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 51
            aload 0 /* this */
            aload 3 /* record */
            putfield io.vertx.servicediscovery.types.AbstractServiceReference.record:Lio/vertx/servicediscovery/Record;
         2: .line 52
            aload 0 /* this */
            aload 2 /* discovery */
            putfield io.vertx.servicediscovery.types.AbstractServiceReference.discovery:Lio/vertx/servicediscovery/ServiceDiscovery;
         3: .line 53
            aload 0 /* this */
            aload 1 /* vertx */
            putfield io.vertx.servicediscovery.types.AbstractServiceReference.vertx:Lio/vertx/core/Vertx;
         4: .line 54
            return
        end local 3 // io.vertx.servicediscovery.Record record
        end local 2 // io.vertx.servicediscovery.ServiceDiscovery discovery
        end local 1 // io.vertx.core.Vertx vertx
        end local 0 // io.vertx.servicediscovery.types.AbstractServiceReference this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    5     0       this  Lio/vertx/servicediscovery/types/AbstractServiceReference<TT;>;
            0    5     1      vertx  Lio/vertx/core/Vertx;
            0    5     2  discovery  Lio/vertx/servicediscovery/ServiceDiscovery;
            0    5     3     record  Lio/vertx/servicediscovery/Record;
    MethodParameters:
           Name  Flags
      vertx      
      discovery  
      record     

  public synchronized <X> X cached();
    descriptor: ()Ljava/lang/Object;
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // io.vertx.servicediscovery.types.AbstractServiceReference this
         0: .line 63
            aload 0 /* this */
            getfield io.vertx.servicediscovery.types.AbstractServiceReference.service:Ljava/lang/Object;
            areturn
        end local 0 // io.vertx.servicediscovery.types.AbstractServiceReference this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lio/vertx/servicediscovery/types/AbstractServiceReference<TT;>;
    Signature: <X:Ljava/lang/Object;>()TX;

  public synchronized <X> X get();
    descriptor: ()Ljava/lang/Object;
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // io.vertx.servicediscovery.types.AbstractServiceReference this
         0: .line 73
            aload 0 /* this */
            getfield io.vertx.servicediscovery.types.AbstractServiceReference.service:Ljava/lang/Object;
            ifnonnull 2
         1: .line 74
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual io.vertx.servicediscovery.types.AbstractServiceReference.retrieve:()Ljava/lang/Object;
            putfield io.vertx.servicediscovery.types.AbstractServiceReference.service:Ljava/lang/Object;
         2: .line 76
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual io.vertx.servicediscovery.types.AbstractServiceReference.cached:()Ljava/lang/Object;
            areturn
        end local 0 // io.vertx.servicediscovery.types.AbstractServiceReference this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lio/vertx/servicediscovery/types/AbstractServiceReference<TT;>;
    Signature: <X:Ljava/lang/Object;>()TX;

  public <X> X getAs(java.lang.Class<X>);
    descriptor: (Ljava/lang/Class;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // io.vertx.servicediscovery.types.AbstractServiceReference this
        start local 1 // java.lang.Class x
         0: .line 89
            aload 0 /* this */
            invokevirtual io.vertx.servicediscovery.types.AbstractServiceReference.get:()Ljava/lang/Object;
            astore 2 /* svc */
        start local 2 // java.lang.Object svc
         1: .line 91
            aload 1 /* x */
            ifnull 2
            aload 1 /* x */
            aload 2 /* svc */
            invokevirtual java.lang.Class.isInstance:(Ljava/lang/Object;)Z
            ifeq 3
         2: .line 92
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 2 /* svc */
            areturn
         3: .line 94
      StackMap locals:
      StackMap stack:
            aload 1 /* x */
            aload 2 /* svc */
            invokestatic io.vertx.servicediscovery.utils.ClassLoaderUtils.createWithDelegate:(Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 2 // java.lang.Object svc
        end local 1 // java.lang.Class x
        end local 0 // io.vertx.servicediscovery.types.AbstractServiceReference this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lio/vertx/servicediscovery/types/AbstractServiceReference<TT;>;
            0    4     1     x  Ljava/lang/Class<TX;>;
            1    4     2   svc  Ljava/lang/Object;
    Signature: <X:Ljava/lang/Object;>(Ljava/lang/Class<TX;>;)TX;
    MethodParameters:
      Name  Flags
      x     

  public <X> X cachedAs(java.lang.Class<X>);
    descriptor: (Ljava/lang/Class;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // io.vertx.servicediscovery.types.AbstractServiceReference this
        start local 1 // java.lang.Class x
         0: .line 108
            aload 0 /* this */
            invokevirtual io.vertx.servicediscovery.types.AbstractServiceReference.cached:()Ljava/lang/Object;
            astore 2 /* svc */
        start local 2 // java.lang.Object svc
         1: .line 110
            aload 2 /* svc */
            ifnonnull 3
         2: .line 111
            aconst_null
            areturn
         3: .line 114
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 1 /* x */
            ifnull 4
            aload 1 /* x */
            aload 2 /* svc */
            invokevirtual java.lang.Class.isInstance:(Ljava/lang/Object;)Z
            ifeq 5
         4: .line 115
      StackMap locals:
      StackMap stack:
            aload 2 /* svc */
            areturn
         5: .line 117
      StackMap locals:
      StackMap stack:
            aload 1 /* x */
            aload 2 /* svc */
            invokestatic io.vertx.servicediscovery.utils.ClassLoaderUtils.createWithDelegate:(Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 2 // java.lang.Object svc
        end local 1 // java.lang.Class x
        end local 0 // io.vertx.servicediscovery.types.AbstractServiceReference this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Lio/vertx/servicediscovery/types/AbstractServiceReference<TT;>;
            0    6     1     x  Ljava/lang/Class<TX;>;
            1    6     2   svc  Ljava/lang/Object;
    Signature: <X:Ljava/lang/Object;>(Ljava/lang/Class<TX;>;)TX;
    MethodParameters:
      Name  Flags
      x     

  protected abstract T retrieve();
    descriptor: ()Ljava/lang/Object;
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
    Signature: ()TT;

  protected void onClose();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=0, locals=1, args_size=1
        start local 0 // io.vertx.servicediscovery.types.AbstractServiceReference this
         0: .line 135
            return
        end local 0 // io.vertx.servicediscovery.types.AbstractServiceReference this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lio/vertx/servicediscovery/types/AbstractServiceReference<TT;>;

  public io.vertx.servicediscovery.Record record();
    descriptor: ()Lio/vertx/servicediscovery/Record;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // io.vertx.servicediscovery.types.AbstractServiceReference this
         0: .line 139
            aload 0 /* this */
            getfield io.vertx.servicediscovery.types.AbstractServiceReference.record:Lio/vertx/servicediscovery/Record;
            areturn
        end local 0 // io.vertx.servicediscovery.types.AbstractServiceReference this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lio/vertx/servicediscovery/types/AbstractServiceReference<TT;>;

  public synchronized void release();
    descriptor: ()V
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // io.vertx.servicediscovery.types.AbstractServiceReference this
         0: .line 147
            aload 0 /* this */
            getfield io.vertx.servicediscovery.types.AbstractServiceReference.discovery:Lio/vertx/servicediscovery/ServiceDiscovery;
            checkcast io.vertx.servicediscovery.impl.DiscoveryImpl
            aload 0 /* this */
            invokevirtual io.vertx.servicediscovery.impl.DiscoveryImpl.unbind:(Lio/vertx/servicediscovery/ServiceReference;)V
         1: .line 148
            aload 0 /* this */
            getfield io.vertx.servicediscovery.types.AbstractServiceReference.service:Ljava/lang/Object;
            ifnull 4
         2: .line 149
            aload 0 /* this */
            invokevirtual io.vertx.servicediscovery.types.AbstractServiceReference.onClose:()V
         3: .line 150
            aload 0 /* this */
            aconst_null
            putfield io.vertx.servicediscovery.types.AbstractServiceReference.service:Ljava/lang/Object;
         4: .line 152
      StackMap locals:
      StackMap stack:
            return
        end local 0 // io.vertx.servicediscovery.types.AbstractServiceReference this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lio/vertx/servicediscovery/types/AbstractServiceReference<TT;>;

  public void close();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // io.vertx.servicediscovery.types.AbstractServiceReference this
         0: .line 160
            aload 0 /* this */
            invokevirtual io.vertx.servicediscovery.types.AbstractServiceReference.release:()V
         1: .line 161
            return
        end local 0 // io.vertx.servicediscovery.types.AbstractServiceReference this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lio/vertx/servicediscovery/types/AbstractServiceReference<TT;>;

  public synchronized boolean isHolding(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Z
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // io.vertx.servicediscovery.types.AbstractServiceReference this
        start local 1 // java.lang.Object object
         0: .line 166
            aload 0 /* this */
            getfield io.vertx.servicediscovery.types.AbstractServiceReference.service:Ljava/lang/Object;
            ifnull 2
            aload 1 /* object */
            invokevirtual java.lang.Object.hashCode:()I
            aload 0 /* this */
            getfield io.vertx.servicediscovery.types.AbstractServiceReference.service:Ljava/lang/Object;
            invokevirtual java.lang.Object.hashCode:()I
            if_icmpeq 1
            aload 1 /* object */
            aload 0 /* this */
            getfield io.vertx.servicediscovery.types.AbstractServiceReference.service:Ljava/lang/Object;
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifeq 2
      StackMap locals:
      StackMap stack:
         1: iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         2: iconst_0
            ireturn
        end local 1 // java.lang.Object object
        end local 0 // io.vertx.servicediscovery.types.AbstractServiceReference this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    3     0    this  Lio/vertx/servicediscovery/types/AbstractServiceReference<TT;>;
            0    3     1  object  Ljava/lang/Object;
    MethodParameters:
        Name  Flags
      object  
}
Signature: <T:Ljava/lang/Object;>Ljava/lang/Object;Lio/vertx/servicediscovery/ServiceReference;
SourceFile: "AbstractServiceReference.java"