我在C#中有一个简单的Screen
类,它有一堆事件(与相应的委托),如FadeOutEvent
。Java相当于C#的委托/事件:动态更改事件调用代码
我想将我的库移植到Java,并且我发现事件/委托的机制真的很乱。具体来说,我不能轻易写这样的代码:
if (someVar == someVal) {
this.FadeOutComplete +=() => {
this.ShowScreen(new SomeScreen());
};
} else {
this.FadeOutComplete +=() => {
this.ShowScreen(new SomeOtherScreen());
};
}
为了你纯Java的家伙,从本质上讲,我哀的是无法重新分配事件处理方法在当前类别的动态,而不创建新类;似乎如果我使用接口,当前类必须执行接口,并且我不能更改稍后调用的代码。
在C#中,这是常见的,你有一些代码:
- 在构造函数/早,分配一些事件处理代码,事件执行期间
- 后,取出该代码完全
- 通常情况下,即原来的处理程序切换到不同的处理程序代码
策略模式可以解决这个问题(并执行),尽管我NE编辑额外的类和接口来完成它;在C#中,它只是一个有趣的事件/委托,我完成了。
有没有办法做到这一点,没有内部/匿名类?
编辑:我刚才看到this SO question,这可能会有所帮助。
只需搜索“[java]战略模式”,就会发现很多很多的例子。 –
@HovercraftFullOfEels我做到了。他们大多需要很多额外的类(甚至匿名类),我真的不喜欢。作为一名C#开发人员,这是微不足道的,不需要类。当然,我可以用私人/内部课程来完成,但为什么我必须这样做? – ashes999
@ ashes999 Umn如何在没有lambda的情况下实现你的事件 - 这与c#中的匿名内部类(实际上与它的约束和所有内容几乎完全相同)基本相同?除了Java笨拙的语法之外,最大的区别是你需要一个接口来定义委托/事件。而且没有办法解决这个问题,因为函数不是Java中的头等对象。 – Voo