Sobes.tech
Junior

¿Qué cambios ocurrieron en la creación de clases entre Kotlin y Java?

sobes.tech AI

Respuesta de la IA

Los cambios principales entre Kotlin y Java al crear clases:

  • Sintaxis: Kotlin tiene una sintaxis más concisa y expresiva para definir clases.
  • Constructor Primario: Kotlin permite definir el constructor directamente en la cabecera de la clase.
  • Clases de Datos: Kotlin proporciona un tipo especial de clase para almacenar datos con generación automática de equals(), hashCode(), toString(), copy() y componentN().
  • Clases Selladas: Kotlin soporta una jerarquía limitada de clases, evitando la creación de subclases fuera del paquete definido.
  • Delegación: Kotlin tiene soporte nativo para delegar propiedades e interfaces.
  • Seguridad Null: Kotlin introduce un sistema de tipos estricto para trabajar con null, previniendo NPE.

Tabla comparativa:

Característica Kotlin Java
Declaración de clase class MyClass (val property: Type) class MyClass { Type property; }
Constructor (Primario) En la cabecera de la clase Método separado
Clase de Datos Soporte nativo (data class) Requiere implementación manual / Lombok
Clase Sellada Soporte nativo (sealed class) No soportado
Delegación Soporte nativo (by) Requiere implementación manual
Seguridad Null Sistema de tipos estricto para null Permite null implícito

Ejemplo de Clase de Datos en Kotlin:

data class User(val name: String, val age: Int)

Ejemplo de clase equivalente en Java (sin usar librerías adicionales):

public class User {
    private final String name;
    private final int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return age == user.age && Objects.equals(name, user.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    @Override
    public String toString() {
        return "User{" +
               "name='" + name + '\'' +
               ", age=" + age +
               '}';
    }
}