code: public <V> FailureListener<V> retype (Class<V> klass)
      {
          @SuppressWarnings("unchecked") FailureListener<V> casted = (FailureListener<V>)this;
          return casted;
      }
docs: Recasts us to look like we're of a different type. We can safely do this because we know
  that requestCompleted never actually looks at the value passed in.