Код: Выделить всё
package org.example;
import java.util.List;
import java.util.Optional;
interface Command { String name();}
class DeleteCommand implements Command {
@Override
public String name() {return "Delete command";}
}
interface CommandHandler {
boolean supportsCommand(Class klazz);
String commandName(C command);
}
class DeleteCommandHandlerImpl implements CommandHandler {
@Override
public boolean supportsCommand(Class klazz) {return DeleteCommand.class.isAssignableFrom(klazz);}
@Override
public String commandName(DeleteCommand command) {return command.name();}
}
public class Main {
public static void main(String[] args) {
Command toBeHandled = new DeleteCommand();
List knownCommands = List.of(new DeleteCommandHandlerImpl());
Optional result = knownCommands
.stream()
.filter(commandHandler -> commandHandler.supportsCommand(toBeHandled.getClass()))
.findFirst()
.map(commandHandler -> commandHandler.commandName(toBeHandled));
System.out.println(result);
}
}
Согласно PECS, я использую этот список, поэтому он должен быть List
Подробнее здесь: https://stackoverflow.com/questions/768 ... nd-mapping