У меня есть следующий метод:
public <T extends Result> T execute(Command<T> command)
{
return new LoginResult();
}
Здесь Result
- это интерфейс, а класс LoginResult
реализует этот интерфейс. Однако я получаю сообщение об ошибке:
Несовместимые типы, требуемые: T, найдены: com.foo.LoginResult
Тем не менее, если я изменяю сигнатуру метода на:
public Result execute(Command<T> command)
Тогда одна и та же обратная линия работает нормально, без ошибок.
Какая проблема здесь? И как я могу вернуть LoginResult
из этого метода?
Изменить: причина, по которой я хочу использовать generics, заключается в том, что я могу сделать что-то вроде следующего:
Command<LoginResult> login = new Command<>();
LoginResult result = execute( login );