Kotlin clase de datos v / s clase abierta?

B.shruti:

Como estoy convirtiendo mi proyecto de Java para proyecto Kotlin, llegué a saber acerca de las clases de datos en Kotlin (sustitución de las clases del modelo de Java).

Ahora tengo un requisito para mi kotlin data classpara apoyar RealmObject, pero de acuerdo con el enlace de la clase de datos de Kotlin RealmObject , dice que las clases de datos aparentemente no son compatibles en el reino, por lo que necesito para hacer mi data classcomo open class.

Así que, básicamente, quiero saber la diferencia entre estos dos términos.

GhostCat saludos Monica C.:

Datos clases están destinadas a valores de retención. En el sentido de Java Bean, su propósito principal es para envolver alrededor de un conjunto de valores.

Lo que hace Java Beans realmente feo es que muchos métodos importantes, como por ejemplo equals(), hashcode()o toString()que idealmente deberían saber sobre los campos de tu clase ... son heredados de java.lang.Object. Y por lo tanto no hacen nada útil.

Cuando se declara una data classen Kotlin, el compilador Kotlin simplemente agrega una aplicación razonable para todos estos métodos. Ver Kotlin-lang :

El compilador se deriva automáticamente los siguientes miembros de todas las propiedades declaradas en el constructor principal:

  • es igual a () / hashCode par ();
  • toString () de la forma "de usuario (nombre = John, edad = 42)";

En otras palabras: cuando esa clase de usuario es una clase de datos, y cuando se tiene dos usuarios con objetos declarados User(name=John, age=42), entonces esos dos objetos será igual, ya que la generada equals() método comparará el nombre y edad dentro de los objetos de la clase de datos.

Un abierto de clase por el contrario, es una clase ordinaria que está abierta para la extensión. Significado: por defecto, cuando se escribe una clase en Kotlin, puede no ser extendido. Sí, la herencia se impidió por defecto. Al declarar una clase para ser abierto, se indica al compilador: "Tengo la intención de extender esta clase". En otras palabras: si usted quiere tener Child extends Base, a continuación, su Baseclase debe ser declarada abierta en Kotlin.

En resumen: los datos de las clases están destinadas como contenedores para los valores , que se pueden utilizar como eso. Abierta es un concepto diferente, simplemente se reduce a: puede ser hereditaria (anulado, respectivamente, cuando se habla de métodos) por alguna clase hija.

En resúmen: en esa pregunta que está vinculando a, le dicen:

  • no se puede utilizar Realm para procesar datos de clases
  • y el ejemplo dado simplemente asume que tal vez desee extender esa clase persona, por lo que se declaró `open``

Supongo: a menos que la intención de crear subclases de las clases, sólo tiene que ir sin la palabra clave abierta! Escribe Kotlin estándar, y hacerlos abierta si están destinados a ser ampliado.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=232377&siteId=1
Recomendado
Clasificación