Как проверить универсальное приведение в Java - PullRequest
0 голосов
/ 19 ноября 2018
interface Command<I, O> {
    O process(I i);
}

interface Undo<I> {
    void undo(I i);
}


public class CommandRunner {
    public static <I, O> O process(Command<I, O> command, I request) {
        O result = null;

        try {
            result = command.process(request);
        } catch(Exception ex) {
            if (command instanceof Undo) {
                ((Undo<I>) command).undo(request); // <-- unchecked cast
            }
        }

        return result;
    }
}

Как я могу избежать непроверенного предупреждения о сотворении?

1 Ответ

0 голосов
/ 19 ноября 2018

1) Если Undo является специализированным Command, имеет Undo extension Command: -

interface Undo<I> extends Command {...}

2) Иначе, вы можете создать третийинтерфейс: -

interface ReversibleCommand extends Command, Undo {...}

и переключение на if (command instanceof ReversibleCommand) {...}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...