你需要返回一个 ServerCall.Listener 。但既然你不知道 Listener 委托,您可以覆盖中的每个方法 Listener 将回调添加到队列。身份验证完成后,排空队列。
ServerCall.Listener
Listener
class DelayedListener<ReqT> extends Listener<ReqT> { private Listener<ReqT> delegate; private List<Runnable> events = new ArrayList<Runnable>(); @Override public synchronized void onMessage(ReqT message) { if (delegate == null) { events.add(() -> delegate.onMessage(message)); } else { delegate.onMessage(message); } } ... public synchronized void setDelegate(Listener<ReqT> delegate) { this.delegate = delegate; for (Runnable runnable : events) { runnable.run(); } events = null; } }