тоже спрошу, никогда не волновало настолько, чтобы...
# russian
g
тоже спрошу, никогда не волновало настолько, чтобы что-то менять но все же:
Copy code
1)
sealed class Foo {
    class Bar : Foo()
}
===============
2)
sealed class Foo {
    object Bar : Foo()
}
Вы используете object? Он же по идее так и останется висеть в памяти, а первый должен уйти в GC, нет?
a
Один объект в памяти вообще погоды не сделает. Он же не накапливается, тем более если у него стейта нет. Класс если что тоже в памяти висит.
m
Если никогда не нужен ни один экземпляр Bar, то class, несомненно, дешевле.
a
Нэ сильно. Если объект не создается его тоже нет, он же ленивый
прям как я...
e
я думаю класс должен как минимум быть
data
a
Зачем?
e
иначе сравнение в
when
и хеш в колекциях не будут работать
a
Сравнение по силед классу делается по типу а не по содержанию, не путайте пожалуйста. Это две разные вещи
e
что то новое выучил сегодня
но в
when
правда
is
используется
что сравнивает ~классы~типы
g
типы
a
В этом смысле object не очень осмысленен там, потому что его можно сравнить просто при помощи
===
. Но зависит от задачи
g
в when можно без
is
если в sealed object
но назад к памяти, object это lazy singleton, но это слабое утешение. Если их прям много, то в совокупности, думаю, там неплохо наберётся. С другой стороны, enum так делали годами и ничего...
a
Много это 1000? Без кодогенератора слабо
g
просто я их в mvi-подобной архитектуре в качестве событий использую, т.е. их по десятку на экран может быть.
e
я тока проверил и: 1. when без is не работает для классов наследованных от sealed (не для object) 2. Intristics.areEquals для класса наследованного от sealed делает дефолтное java сравнение
g
если object, то можно без
is
, если class/data, то нужен
is
для сравнения типов или без
is
, если сравниваешь инстансы (редко может понадобиться). Все логично.
e
угу, я просто проверил новое знание полученное в этом thread
Copy code
Сравнение по силед классу делается  по типу а не по содержанию, не путайте пожалуйста. Это две разные вещи
g
ну, он имел ввиду good practice, видимо 🙂. Я просто везде
is
ставлю, чтоб не заморачиваться.
e
aa, oke!!! Теперь понял окончательно
m
Если их прям много, то в совокупности, думаю, там неплохо наберётся.
Если писать код, то там вообще много набирается. Коллекции, строки, неинлайновые лямбды с методрефами, проперти делегаты. Я бы больше беспокоился не о пустых классах. И, ещё раз, object удерживает один экземпляр, instance size для пустого класса — 8..16 байт.
класс должен как минимум быть
data
Ничего более бесполезного в котлине нет и никогда не будет. 🙂
g
понеслась!😅
a
Ну не знаю как там про дата классы, но про память все верно сказано.
1
c
Отчасти согласен с miha-x64. И так примеривался и сяк, но везде, где мне в коде нужен hashCode, Котлиновский data класс не подходит 🙂
Изредка использую только за красивый toString 😄
a
Ну я обычно как маркер использую, и для equals
e
Мы используем data класс чтобы не писать компараторов в тестах
g
используем дата классы всегда и везде для данных, если нет всяких странностей с hibernate и прочими хаками с nullable id то не понимаю проблемы
1
класс должен как минимум быть
data
Класс в данном случае не только не должен быть
data
но и не может быть
data
, потому что должен иметь как минимум 1 проперти в главном конструкторе