Я застрял с кодом, который я не понимаю, почему он работает.Предположим, что я создаю общий интерфейс Foo<T>
следующим образом:
interface Foo<T>{
void set(T item);
}
Затем я создаю класс с именем Bar
, который реализует Foo<String>
следующим образом:
class Bar implements Foo<String>{
@override
public void set(String item){
//useless body
}
}
На основедля этого мы можем написать следующий код:
Bar bar = new Bar();
bar.set("Some string");
Foo rawFoo = (Foo) bar;
rawFoo.set(new Object()); // ClassCastException: Object cannot be cast to string
Эта последняя строка - та, которую я на самом деле не получаю.Как известно, при использовании необработанных типов универсальные типы параметров преобразуются в Object
.В этом случае код компилируется, и мы можем передать Object в метод set()
.Но как Java определяет, что она должна приводить Object к String во время выполнения?