Данные классы предназначены для хранения значений.В смысле Java Bean, их основная цель - обернуть вокруг некоторый набор значений.
Что делает Java bean действительно уродливым, так это то, что многие важные методы, такие как equals()
, hashcode()
или toString()
, в идеале должен знать о полях вашего класса ... наследуются от java.lang.Object.И поэтому они не делают ничего полезного.
Когда вы объявляете data class
в Kotlin, компилятор Kotlin просто добавляет разумную реализацию для всех этих методов.См. kotlin-lang :
Компилятор автоматически извлекает следующие члены из всех свойств, объявленных в первичном конструкторе:
- equals () / hashCode() пара;
- toString () в форме «Пользователь (имя = Джон, возраст = 42)»;
Другими словами: когда этот класс пользователя является классом данных,и когда у вас есть два пользовательских объекта, объявленных с User(name=John, age=42)
, тогда эти два объекта будут равны, потому что метод генерируется equals()
будет сравнивать имя и возраст в пределах этого класса данныхobjects.
Класс Open , с другой стороны, является обычным классом, который open для расширения.Значение: по умолчанию, когда вы пишете класс на Kotlin, он может быть не расширенным.Да, наследование запрещено по умолчанию.Объявляя класс открытым, вы говорите компилятору: «Я намерен расширить этот класс».Другими словами: если вы хотите иметь Child extends Base
, тогда ваш Base
класс должен быть объявлен open в Kotlin.
Вкратце: data классыподразумевается как контейнеры для значений , которые можно использовать как таковые. Open - это другое понятие, оно просто сводится к: может быть унаследовано (соответственно переопределено, когда речь идет о методах) некоторым дочерним классом.to, вам говорят:
- вы не можете использовать Realm для обработки данных классов
- , а приведенный там пример просто предполагает что, возможно, вы захотите расширить этот класс Person, поэтому он объявлен `open``
Я предполагаю: если вы не собираетесь создавать подклассы своих классов, вы просто идете без открытое ключевое слово!Напишите стандартные kotlin и сделайте их открытыми, если они предназначены для расширения.