В следующем коде dowcast для явно несовместимого типа проходит компиляцию:
public class Item {
List<Item> items() { return asList(new Item()); }
Item m = (Item) items();
}
Item
и List<Item>
являются разрозненными типами, поэтому приведение не может быть успешным. Почему компилятор разрешил это?