Дженерики и связь типов
Добрый день.
У меня, как у человека, привыкшего к C++ и шаблонам, постоянно возникают какие-то недопонимания с дженериками.
Итак, предположим, у нас есть принтеры, которые умеют печатать некоторые объекты:
public interface Printer<X> {
public void print(X obj);
}
Есть список, на каком принтере и что надо напечатать:
class PrintInfo<X> {
public Printer<X> printer;
public X obj;
}
Queue<PrintInfo<?>> q;
Ттеперь хочется начать печатать:
PrintInfo<?> pi = q.poll();
pi.printer.print(pi.obj); // FAIL
Проблема в том, что Джава почему-то в упор не видит, что это корректный вызов, хотя связь типов, вроде бы, очевидна. Объясните, пожалуйста, почему так происходит, и какие есть варианты обхода?
P.S. Я обошёл, добавив в PrintInfo
метод print
, который, собственно, печатает свой объект на своём принтере, и вызываю его.