Общий тип возврата - Java - PullRequest
       1

Общий тип возврата - Java

1 голос
/ 17 февраля 2011

Мой вопрос основан на вызове метода сервера с использованием шаблона команды. Однако есть много возможных команд. Я хотел бы представить тип возвращаемого значения для метода execute каждого экземпляра команды. Я знаю, что это не намеренное использование шаблона команды, но у меня нет другого выбора. Мне нужно настроить командный шаблон, чтобы он работал на меня.

Для сигнатуры метода «execute» в каждой команде, что я мог бы иметь в качестве возвращаемого типа? Я предполагаю, что это должен быть ковариантный тип возврата. Это не идеальное решение, но у меня не так много других вариантов. Я разрабатываю сервер для своего приложения для Android, а RMI недоступен в Android SDK. Буду признателен за любые советы по поводу типа возврата. Мне нужно будет принять во внимание все типы возвращаемых данных, которые могут быть возвращены из всех различных команд. Я не уверен, существует ли какой-то шаблон для этой проблемы возврата какого-либо общего возвращаемого типа.

Я уже смотрел на эту тему: шаблон команды, возвращающий статус но мне нужно больше вдохновения.

Ответы [ 2 ]

3 голосов
/ 17 февраля 2011

Я, наверное, не понимаю настоящего вопроса здесь, но это звучит просто.

public interface Command<T> {
  T execute();
}

И тогда команды могут быть:

public class FooCommand implements Command<Bar> {

  public Bar execute() {
    ...
  }
}

Или есть где-то подвох?

1 голос
/ 17 февраля 2011

Похоже, что вы действительно хотите RMI, который Android не поддерживает.

Вы можете попробовать использовать легкий RMI.

Чтобы реализовать что-то самостоятельно, начните с интерфейса biziclop,

// suppose there are object input/output streams established

// on client side
FooCommand foo = new FooCommand(params..);
Bar bar = remoteExec( foo );

<T> T remoteExec(Command<T> cmd)
     output.writeObject(cmd);
     return (T)input.readObject();

// on server side

    Command cmd = (Command)input.readObject();
    Object result = cmd.execute();
    output.writeObject(result); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...