java - 相当于 Java 中的 C# Action() 委托(delegate)吗?

标签 java c#

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/

相关文章:

c# - 如何减轻在 C# 中初始化列表字典的痛苦?

c# - 数据类型从int转换为string时发生错误

C#:将特定枚举类型的数组作为 params object[] 参数传递

java - 多线程不平衡Java

java - 如何在第一个逗号之前拆分字符串?

java - JPA错误参数异常: SQL String cannot be NULL: despite CrudRepository save function recieving populated entity

java - 同时在同一个基于 Flex 的 App Engine 应用程序的 5 个版本中打开 1 个文件?

c# - 为多个项目指定代码分析输出文件

java - 使用最小堆实现 Dijkstra 算法但失败

c# - 如何在不单击一次和任何其他第三方工具的情况下在 wpf 中添加软件更新程序?