У меня есть простой класс foo
, и я могу передать в интерфейс коллекции (либо Map
или List
) без какой-либо ошибки компилятора. Обратите внимание, что класс Foo
не реализует никакого интерфейса или не расширяет какой-либо другой класс.
public class Foo {
public List<String> getCollectionCast() {
return (List<String>) this; // No compiler error
}
public Map<String, String> getCollection2Cast() {
return (Map<String, String>) this; // No compiler error
}
public Other getCast() {
return (Other)this; // Incompatible types. Cannot cast Foo to Other
}
public static class Other {
// Just for casting demo
}
}
Почему компилятор Java не возвращает ошибку несовместимых типов при попытке Foo
класс Foo
в коллекцию?
Foo
не реализует Collection
. Я ожидал бы ошибку несовместимых типов, потому что, учитывая текущую подпись класса Foo
, это не может быть Collection
.