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 中,这将非常有帮助。
谢谢。
我要让它变得快速而肮脏。不幸的是,在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
}
}