私が "ヘッドファーストデザインパターン"のコマンドパターンを読んでいる本では、インタフェースをラムダに置き換える例があります。インタフェースを実装しているラムダ
これはJavaだけが可能なものですか?彼らはこれが可能であることを示すいる書籍で
// Receiver
public class Light
{
public void On() {
Console.WriteLine("Lights on");
}
public void Off() {
Console.WriteLine("Ligts off");
}
}
// Command interface
public interface ICommand
{
void Execute();
}
// Concrete command
public class SimpleCommandLightOn : ICommand
{
private readonly Light light;
public SimpleCommandLightOn(Light light) {
this.light = light;
}
public void Execute() {
light.On();
}
}
// Concrete command
public class SimpleCommandLightOff : ICommand
{
private readonly Light light;
public SimpleCommandLightOff(Light light)
{
this.light = light;
}
public void Execute()
{
light.Off();
}
}
// Invoker
public class SimpleRemoteControl
{
private ICommand command;
public void SetCommand(ICommand command) {
this.command = command;
}
public void OnButtonPress() {
command.Execute();
}
// OffCommand needs to be set
public void OffButtonPress() {
command.Execute();
}
}
:
Light light = new Light();
remote.SetCommand(() => light.On());
しかし、C#はエラーをスロー は、ここでは例の本から
です。これは、C#で作業する場合はありませんか?
エラーが正確にスローされることを知ることは、むしろ役立つでしょう。 – venerik
C#にはそのような推論はありません。適切な署名の代理人にインターフェイスを置き換える必要があります。 –
C#はサポートしていません。ここに私の[最近の回答](http://stackoverflow.com/a/36137784/2530848)の代替案があります。 –