Почему следующий код не компилируется?
interface Iface<T> { }
class Impl<T> implements Iface<T> { }
class TestCase {
static Class<? extends Iface<?>> clazz = Impl.class;
}
Ошибка
Java: несовместимые типы:
java.lang.Class<Impl>
нельзя преобразовать вjava.lang.Class<? extends Iface<?>>
но я не понимаю, почему подстановочный знак не захватывает.
Class<Impl>
вClass<? extends Iface<?>>
, поэтому, по сути, применяются те же правила.) Если вам это действительно нужно, то можно использовать его так, как я описал здесь.(Class<? extends Iface<?>>)(Class<? extends Impl>)Impl.class
В противном случае избегайте необработанных аргументов типа. - person Radiodef   schedule 07.05.2015Class<? extends Iface>
, но это э. Зависит от того, для чего вы используете класс. Вы могли бы аннотировать это таким образом, а затем применить клудж. - person Radiodef   schedule 07.05.2015