Я попытался понять следующее. Этот блок кода напечатает следующийОбщий вид с использованием скобок
[email protected]
[email protected]
Так что я полагаю, что бросок был успешно завершен, но я ожидаю ClassCastException для второго объекта в списке.
public class TestGenerics
{
public static void main(String[] args)
{
Generic<One> integerGeneric = new Generic<One>(new Container(Lists.<Object>newArrayList(new One(), new Two())));
integerGeneric.checkContainer();
}
static class Generic<T>
{
private Container container;
public Generic(Container container)
{
this.container = container;
}
public void checkContainer()
{
for (Object key : container.getObjects())
{
final T genericKey = (T)key;
System.out.println(genericKey);
}
}
}
static class Container
{
Iterable<Object> objects;
public Container(Iterable<Object> objects)
{
this.objects = objects;
}
public Iterable<Object> getObjects()
{
return objects;
}
}
static class One
{
}
static class Two
{
}
}
P.S. Также у меня возникла проблема, связанная с тем, что родовой тип cast (с использованием объекта (T)) возвращает null вместо исключения исключения ClassCastExceptiong, но я не могу его воспроизвести. Если кто-нибудь знает об этом, комментарий здесь, пожалуйста
Возможно, вам захочется посмотреть, что такое «стирание типа» и как оно работает на Java. – Tom
Я собираюсь поспорить, что у вас есть предупреждение о немедленном предупреждении. –
@Tom, спасибо, я узнал, что JVM видит общий тип объекта во время выполнения (или ближайший тип, если он существует) – Gcinbax