如何在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/