1

How can I write code below in java version?

I have read similar questions, but they are confusing, they answered that java didn't have delegate feature like c# had, in other hand they answered with their delegate implementation in java, but nothing is similar with my condition. I really hope it's clear on this question. I have been getting stuck since a week

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

Output:

Action A
Do Task A
Do Task B
Press any keys to continue...
2
  • 1
    Java uses a single-method interface for this concept. You may optionally apply @FunctionalInterface to such an interface. Commented Jan 6, 2020 at 3:04
  • Could you give an example about how do you communicate between classes as code below did?, when Action A is called than Task A and Task B is called using the concept since i am newbie on java, what i understand from@FunctionalInterface is only to ensure that the functional interface can’t have more than one abstract method. Commented Jan 6, 2020 at 3:16

1 Answer 1

1

something similar in java will be to use an interface

you can get the following results

Action A
Do Task A
Do Task B

with the codes below.

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

}
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks for your answers, it helps me , it seems observer pattern implementation.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.