java - 用java编写C#委托(delegate)

标签 java c# delegates

如何在java版本中编写下面的代码?

我读过类似的问题,但它们很令人困惑,他们回答说java没有像c#那样的委托(delegate)功能,另一方面他们用java中的委托(delegate)实现来回答,但与我的情况没有任何相似之处。 我真的希望这个问题是清楚的。 一周以来我一直陷入困境

    class Action
    {
        public delegate void ActionDelegate();
        public static ActionDelegate OnAction;

        public void DoAction()
        {
            Console.WriteLine("Action A");
            if (!ReferenceEquals(OnAction, null))
                OnAction();
        }
    }
    class TaskA
    {
        public TaskA()
        {
            Action.OnAction += DoTaskA;
        }
        private void DoTaskA()
        {
            Console.WriteLine("Do Task A");
        }

    }
    class TaskB
    {
        public TaskB()
        {
            Action.OnAction += DoTaskB;
        }
        private void DoTaskB()
        {
            Console.WriteLine("Do Task B");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            TaskA taskA = new TaskA();
            TaskB task = new TaskB();
            Action action = new Action();
            action.DoAction();
        }
    }

输出:

Action A
Do Task A
Do Task B
Press any keys to continue...

最佳答案

在java中类似的东西是使用接口(interface)

可以得到如下结果

Action A
Do Task A
Do Task B

使用下面的代码。

import java.util.ArrayList;
public class HelloWorld{

     public static void main(String []args){ 

            TaskA taskA = new TaskA();
            TaskB task = new TaskB();
            Action action = new Action();
            action.doAction();
     }
}

interface ActionDelegate {
    void doAction();
}

class Action{

    static public ArrayList<ActionDelegate> onAction = new ArrayList<>();
    public void doAction(){
        System.out.println("Action A");
        for(ActionDelegate ad: onAction){
            ad.doAction();
        }
    }
}
class TaskA implements ActionDelegate{

    TaskA(){
        Action.onAction.add(this);
    }
    public void doAction(){ 
            System.out.println("Do Task A");
    }

}

class TaskB implements ActionDelegate{

    TaskB(){
        Action.onAction.add(this);
    }
    public void doAction(){ 
            System.out.println("Do Task B");
    }

}

关于java - 用java编写C#委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59606165/

相关文章:

java - 我怎样才能解决这个等于原始类型(int)

c# - 实现具有中止能力的方法

c# - Networkstream不规则速度

c# - 线程仍在运行还是只是 LINQPad?

c# - 在 C# 2.0 中使用委托(delegate)结果作为输入

macos - NStoolbar 重新加载/刷新

java - Android:在一个 Activity 中动态添加 Spinner 不起作用

java - 无法将数组从 Angular 2 typescript 传递到 Spring Java

java - 如何使用单个/简单的 for 循环以不同的比例和平移多次绘制蝴蝶曲线?

c# - 将事件处理程序的定义作为 lambda 表达式传递