C#.net events and java

本文关键字:java and events net | 更新日期: 2023-09-27 18:32:28

所以我来自C#.NET背景,我正在尝试在Java中执行此操作

Class A{
public delegate void EventHandler();
    public static event EventHandler workComplete();
void doWork(){
    // DO WORK  
}
void onWorkComplete(){
    // Riase Event
    workComplete();
}

}类主{

A a = new A();
a.workComplete += () -> {
    // On Class A Complete Work
    Console.WriteLine("Work Complete");

'
};}

我在 Java 意义上搜索代表事件是 c#.net 中的要求委托,但看起来 Java 没有代表,然后我星标搜索事件在 Java 中的工作方式,然后我分为三件事1-动作侦听器2-事件侦听器3 和许多接口4- 观察者模式

这一切都与我混淆,也许是因为我只了解使用委托的 C# 事件。

因此,如果有人可以给出一个示例示例,例如上面的 c#.net 代码,,, Java 中,这将非常有帮助。

谢谢。

C#.net events and java

我要让它变得快速而肮脏。不幸的是,在Java中,您必须编写更多代码才能产生相同的结果。

我将代码分为 3 个部分:

  • 类似于delegate声明的接口
  • 包含event声明、订阅逻辑和 raise 逻辑的class A
  • class B哪个是"事件使用者",哪个声明事件处理程序

祝你好运!

// this is what you used to have as a delegate declaration {
public interface IWorkCompletedListener {
    public void someMethodName(Object sender, Object args);
}
// }
// class A will be the event provider
public class A {
    // this is what you used to have for an event declaration {
    // used for the storage of listeners
    private static Vector<IWorkCompletedListener> workComplete = new Vector<IWorkCompletedListener>();
    // used for +=
    public static void addWorkCompleteListener(IWorkCompleteListener listener) {
        A.workComplete.add(listener);
    }
    // used for -=
    public static void removeWorkCompleteListener(IWorkCompleteListener listener) {
        A.workComplete.remove(listener);
    }
    // }
    // this is what you would use to raise the event {
    private static void raiseWorkCompletedListener(Object sender, Object args) {
        for (IWorkCompletedListener listener : A.workComplete)
            listener.someMethodName(sender, args);
    }
    // }
    // and the test code
    public static void doWork() {
        // Stuff goes here
        A.raiseWorkCompletedListener(null, null);
    }
}
// class B will be the event consumer
public class B {
    public static void subscribeAndCallDoWork() {
        // this is what += used to be
        A.addWorkCompleteListener(new IWorkCompletedListener {
            public void someMethodName(Object sender, Object args) {
                // I didn't want to force class B to implement the interface
                // hence I used an anonymous interface implementation
                // from which I'm calling the "event handler"
                B.onWorkCompleted(sender, args);
            }
        });
        A.doWork();
    }
    private static onWorkCompleted(Object sender, Object args) {
       // expect to be called here
    }
}