code: protected <F extends ConnectFuture> ConnectFuture connectInternal(final ResourceAddress remoteAddress, final IoHandler handler, final IoSessionInitializer<F> initializer) {
          
          ConnectFuture future;
  
          final String nextProtocol = remoteAddress.getOption(ResourceAddress.NEXT_PROTOCOL);
          ResourceAddress transport = remoteAddress.getTransport();
          if (transport != null) {
              BridgeConnector connector = bridgeServiceFactory.newBridgeConnector(transport);
              future = connector.connect(transport, handler, new IoSessionInitializer<F>() {
                  @Override
                  public void initializeSession(IoSession session, F future) {
                      REMOTE_ADDRESS.set(session, remoteAddress);
                      setLocalAddressFromSocketAddress(session, getTransportName(), nextProtocol);
  
                      if (initializer != null) {
                          initializer.initializeSession(session, future);
                      }
                  }
              });
  
          } else {
  
              T socketAddress = socketAddressFactory.createSocketAddress(remoteAddress);
  
              future = connector.connect(socketAddress, new IoSessionInitializer<F>() {
                  @Override
                  public void initializeSession(IoSession session, F future) {
  
                      // connectors don't need lookup so set this directly on the session
                      session.setAttribute(BridgeConnectHandler.DELEGATE_KEY, handler);
                      REMOTE_ADDRESS.set(session, remoteAddress);
                      setLocalAddressFromSocketAddress(session, getTransportName(), nextProtocol);
  
                      if (initializer != null) {
                          initializer.initializeSession(session, future);
                      }
                  }
              });
          }
  
          return future;
      }
docs: THIS IS A BUG IN JAVA, should not need two methods just to capture the type