Информация об изменениях

Сообщение Re[14]: Поругайте TypeScript/node.js от 27.06.2022 11:20

Изменено 27.06.2022 11:28 Pauel

Re[14]: Поругайте TypeScript/node.js
Здравствуйте, ·, Вы писали:

P>> Коллекции джавы позволяют спокойно добавить собаку в массив котов, использую всего лишь преобразование к базовому классу коллекции. Соответсвенно при итерации ты получишь ... приплызд.

·>Нет, коллекции джавы не позволяют. https://stackoverflow.com/questions/44819476/covariance-in-java-collection-cannot-be-added-to

Успокойся,



P>>Аналогичный фокус есть и в дотнете.

·>Ну значит тоже дырявое поделие микрософта.

P>>То есть, эта самая дырка есть почти что во всех мейнстримных языках, а в Си/Си++ это вообще норма жизни. И ничего, живут люди.

·>const_cast же требуется.
Re[14]: Поругайте TypeScript/node.js
Здравствуйте, ·, Вы писали:

P>> Коллекции джавы позволяют спокойно добавить собаку в массив котов, использую всего лишь преобразование к базовому классу коллекции. Соответсвенно при итерации ты получишь ... приплызд.

·>Нет, коллекции джавы не позволяют. https://stackoverflow.com/questions/44819476/covariance-in-java-collection-cannot-be-added-to

Смотри внимательно — дыра в джаве с начала времён. Ровно та же проблема, что ты показал, только другие последствия:
import java.util.ArrayList;

class Playground {
    public static void main(String[ ] args) {
        ArrayList<String> languages = new ArrayList<>();
        ArrayList x = languages;

        languages.add("x y z");
        x.add(5); // собака в массиве котов

        System.out.println(languages.get(1)); // любуешься разницей, а что будет если передавать 0 и 1
    }
}


Скажем, если ты передашь не того наследника, то ровно как и в жээсе, узнаешь об этом только в самый последний момент.

P>>То есть, эта самая дырка есть почти что во всех мейнстримных языках, а в Си/Си++ это вообще норма жизни. И ничего, живут люди.

·>const_cast же требуется.

Совсем необязательно. Зависит от многих вещей, особенно в Си.