Java & Co (@javarush) — Telegram-чат | Telegram Dialogs
Все каналы
Java & Co

Java & Co

@javarush

3.6K участников технологии 💬 Комментарии открыты

Вход в Айтишную - https://t.me/+SMtf609BHIGaMarf Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. ПРАВИЛА - https://t.me/javarush/229767/ НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU

Последние публикации

Java & Co
29.06.2026 20:51
Сложновато, но с этим нужно просто поработать, набить руку и понять практически почему оно так. Просто зубрить это всё особого смысла нет.
Java & Co
29.06.2026 20:49
При ? extends T метод может принять коллекцию с типом T или его наследниками, но добавлять в эту коллекцию нельзя ничего, кроме null, читать из неё можно как T - именно это гарантирует wildcard, а возможность прочитать как родитель или даже Object есть и это уже общее свойство языка, а не особенность ? extends T. При ? super T метод может принять коллекцию с типом T или его родителем, читать из неё можно, но только как Object, потому что компилятор не знает конкретный тип элементов, однако сама операция чтения разрешена и не запрещена, а добавлять можно, но только T и его наследников.
Java & Co
29.06.2026 19:29
Теперь понятно почему в С# используется in out это просто направление потока от более навороченного к более простому. Короче это как воронка. В маленькую бутылочку мы всегда можем налить из коровьего вымени, а из бутылочки в вымя нет.
Java & Co
29.06.2026 19:14
В принципе, правило можно обобщить ещё короче: информацию можно передавать только между идентичными типами или же от более навороченного(производного )к более простому (базовому).
Java & Co
29.06.2026 19:05
Проверь, пожалуйста, ещё раз, вроде ничего не упустил. Получается, что в ситуации с "? super Т" метод может принять коллекцию , содержащую класс, производный от базового (то есть принять Car, производного от Vehicle), но также и коллекцию в которой будет этот самый родитель машины (Object или Vehicle) и может в неё записывать, но записывать может уже только или сам Т (Car) или производный от T (например, Car_4x4). А в ситуации, когда метод имеет сигнатуру "? extends T" он может принять коллекцию, содержащую базовый Т(Vehicle) или производный от него (Car), но имеет право только читать, предлагая, что он полюбому, как минимум, Vehicle. Грубо говоря, он читает, даже если в коллекции производный класс, то метод это не интересует, ему важно, что в нем есть информация базового (поля базового), по сути это аналог когда в С++ я в переменную указателя на базовый класс кладу адрес производного, и дальше я вижу его как базовый, мне достаточно информации, что лежит в базовом. Соответственно я писать туда не могу, могу только читать. Потому, что если я запишу туда только поля базового, то если на самом деле это ссылка на производный, то я не смогу до конца заполнить производный, что не есть хорошо. Поэтому разрешено только читать.
Java & Co
29.06.2026 12:56
Редко надо — факт, лично я не встречал случаи, когда это необходимо. Как следствие — делать к сожалению придётся ручками.
Java & Co
29.06.2026 12:53
Мне пока не совсем понятно как делать глубокую копию объекта. Или это вообще не нужно? Я читал, что это медленно, якобы редко надо
Java & Co
29.06.2026 12:50
Если ты с плюсов переезжаешь, то тебе должно быть максимально легко в жабу влететь (в целом как и в любой сиподобный язык). Главное, что стоит знать — примитивы храняться значением, а всё остальное — ссылками, то есть в терминах си считай, что любая переменная, в которой лежит объект — это указатель. Ты просто не можешь работать с ним так нагло, как в си, этим всем занимается ЖВМ, а ты можешь только использовать его для обращения к полям/методам объекта внутри или передачи куда-либо (передаётся ссылка, не объект, объект остаётся один — из этого следует, что пока любая ссылка будет вести на один объект и менять они все будут его).
Java & Co
29.06.2026 12:45
Да, это примерно оно, звучит похоже. По сути ты сначала собираешь цепочку логики, которая должна быть применима к каждому элементу и потом уже проходишь по коллекции и вызываешь эту цепочку (если очень сильно упрощать)
Java & Co
29.06.2026 12:38
Это похоже на композицию функций, я примерно знаю этот подход. Я когда изучал с++ читал книгу про это, так называемый ленивый подход, когда мы строим пайплайн с нужными фильтрами от функции к функции, заранее не пропуская переменную , а только когда она понадобится, но сам пайплайн мы строим заранее. Есть библиотеки rxcpp или range-v3, zug (трансдьюсеры). В Java получается это встроено уже, хорошо! Я знаю (по крайней мере в с++) есть подход итераторный (когда ты просишь значение и сам суешь в следующий фильтр) и есть подход реактивный (когда ты просто отдаешь какой callback нужно дёрнуть, когда данные, удовлетворяющие пайплайну пройдут его)
Чат поддержки
Ответим здесь же, обычно быстро
Здравствуйте! Напишите ваш вопрос — оператор ответит в этом чате.