Ответ
Нарушение принципа подстановки Лисков (LSP) можно наблюдать в ListView и RecyclerView.
Пример:
val listView: ListView = findViewById(R.id.listView)
listView.adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, items)
// Нарушение LSP: RecyclerView.Adapter несовместим с ListView.Adapter
val recyclerView: RecyclerView = findViewById(R.id.recyclerView)
recyclerView.adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, items) // Ошибка компиляции
Хотя оба адаптера служат одной цели, они не взаимозаменяемы из-за разных интерфейсов. Это нарушает LSP, так как подкласс (RecyclerView.Adapter) не может заменить базовый (ListView.Adapter).
Ответ 18+ 🔞
Да ты посмотри на эту дичь! Сидишь такой, пишешь код, и тут — бац! — принцип подстановки Лисков накрылся медным тазом. Прямо как на примере этих двух упырей, ListView и RecyclerView.
Вот смотри, ёпта, в чём прикол. Оба адаптера вроде бы для одного и того же созданы — данные в списке показывать. Но нет же, блядь! Разработчики Android, видимо, в тот день ебать копать решили, а не архитектуру продумывать.
Сам пример, где всё и посыпалось:
val listView: ListView = findViewById(R.id.listView)
listView.adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, items)
// А вот тут начинается пиздец и нарушение LSP
val recyclerView: RecyclerView = findViewById(R.id.recyclerView)
recyclerView.adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, items) // Ошибка компиляции! Ёперный театр!
Вот и весь цирк. Ожидаешь ты, что раз уж RecyclerView — это такой продвинутый наследник ListView, то и адаптер от старшего брата должен подойти. Ан хуй там! Получается классическое нарушение принципа: объект (RecyclerView.Adapter) не может спокойно заменить объект своего предполагаемого родителя (ListView.Adapter), хотя по смыслу должен бы.
Короче, доверия ебать ноль к такой архитектуре. Хотел просто поменять виджет в разметке, а получаешь овердохуища ошибок и головной боли. Сам от себя охуеешь, когда пытаешься старый код с ListView на RecyclerView перевести. Чистая хитрая жопа, а не принцип подстановки.