C# 引入了委托(delegate)的概念,它表示可以在不知道目标对象的情况下调用的方法。 在 C# API 中我有一个代码:
var onReadyAction = new Action(() => OnServerStateChangedSubject.OnNext(ServerState.Connected));
var onTerminatedAction = new Action(() => OnServerStateChangedSubject.OnNext(ServerState.Disconnected));
其中OnServerStateChangedSubject.OnNext(ServerState.Connected));
是发出有关服务器状态信号的操作。
问题:我如何在java中实现这一点?
方法代码:
protected TradingClientWithQueue //Client class// KeepConnectAlive()
{
var onReadyAction = new Action(() => OnServerStateChangedSubject.OnNext(ServerState.Connected));
var onTerminatedAction = new Action(() => OnServerStateChangedSubject.OnNext(ServerState.Disconnected));
if (Client == null)
{
Client = new TradingClientWithQueue();
//events
Client.OnPacketReceived.Subscribe(OnDataPacketReceivedSubject.OnNext);
ClientSubscribeOnTerminated(onTerminatedAction);
Client.OnClientException.Subscribe(OnClientExceptionSubject.OnNext);
Client.OnClientReady.Subscribe(isReady =>
{
AuthenticateClient();
onReadyAction();
});
Client.Connect(Host, Port);
}
else
{
ClientSubscribeOnTerminated(onTerminatedAction);
Client.Reconnect(Host, Port);
}
return Client;
}
最佳答案
委托(delegate)的等价物是函数式接口(interface)。
Action
是一个消耗项目并返回 void 的函数。等效功能接口(interface)最明显的例子是 Consumer<T>
.
关于java - 相当于 Java 中的 C# Action() 委托(delegate)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55948353/