Я уже некоторое время пытаюсь определить общий интерфейс, но мне не удается
добиться того, что я хочу. Ниже приведен упрощенный пример проблемы.
Допустим, у меня есть общее Сообщение класс
public class Message<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}
и затем я хочу определить интерфейс для передачи вещей:
public interface Transfer<Message<T>> {
public void send(Message message);
}
Проблема в том, что компилятор не принимает это и всегда жалуется на
второй символ «<», независимо от того, какие варианты я пробую.
Как мне указать этот интерфейс, чтобы он был связан с универсальным типом (на основе сообщения)
а также есть доступ к параметризованному типу? </p>
Я планировал использовать этот интерфейс следующим образом:
public class Carrier<Message<T>> implements Transfer<Message<T>> {
public void send(Message message) {
T content = message.getContent();
print(content);
}
public static void print(String s) {
System.out.println("The string equals '" + s + "'");
}
public static void print(Integer i) {
System.out.println("The integer equals " + i);
}
public static void main(String[] args) {
Carrier<Message<String>> stringCarrier = new Carrier<Message<String>>();
Message<String> stringMessage = new Message<String>("test");
stringCarrier.send(stringMessage);
Carrier<Message<Integer>> integerCarrier = new Carrier<Message<Integer>>();
Message<Integer> integerMessage = new Message<Integer>(123);
integerCarrier.send(integerMessage);
}
}
Я провел некоторый поиск и чтение (среди прочего generic faq от Angelika), но я не могу сказать, если это невозможно или я делаю это неправильно.
Обновление 2009-01-16 : Удалено исходное использование «Вещи» вместо «Сообщение » (которое использовалось, потому что с этим я смог скомпилировать без получения синтаксических ошибок на интерфейс).