Напишите C# делегат в java - PullRequest
       17

Напишите C# делегат в java

1 голос
/ 06 января 2020

Как я могу написать код ниже в java версии?

Я читал похожие вопросы, но они сбивают с толку, они ответили, что java не имеет функции делегата, как c#, с другой стороны, они ответили своей реализацией делегата в java, но ничто не похоже на мое состояние. Я действительно надеюсь, что это ясно по этому вопросу. Я застреваю с недели

    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...

1 Ответ

0 голосов
/ 06 января 2020

что-то похожее в java будет использовать интерфейс

, вы можете получить следующие результаты

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");
    }

}
...