У меня есть эти классы:Странная ошибка отлитый в Java
public class A <T>{
}
public interface I {
}
public class X implements I {
}
public class B extends A<X>{
}
В моем коде, если я делаю это я получаю ошибку:
A<I> myobj = (A<I>) new B();
Оно должно быть:
A<X> myobj = (A<X>) new B();
Но если я это сделаю, это нормально и хорошо работает:
A<I> myobj = null;
myobj = (A<I>) Class.forName("B").newInstance();
В этом последнем случае я обращаюсь ко всем методам B и работает очень хорошо.
Мне нужно объявить myobj как A, потому что я гарантирую только интерфейс общих объектов, а не класса.
Кто-нибудь знает, почему мой первый случай не работает?
Я бы хотел, чтобы первый из них был самым элегантным.
http://stackoverflow.com/questions/2745265/ is-listdog-a-subclass-of-listanimal-why-arent-javas-generics-implicit – assylias
cast to A extends I> вместо A –
Спасибо всем A extends I> хорошо работает, и мой код стал более элегантным :).Но я до сих пор смущен последним случаем :( – Heberfa