Sobes.tech
Junior

Que alterações ocorreram na criação de classes entre Kotlin e Java?

sobes.tech IA

Resposta da IA

As principais mudanças entre Kotlin e Java na criação de classes:

  • Sintaxe: Kotlin tem uma sintaxe mais concisa e expressiva para definir classes.
  • Construtor Primário: Kotlin permite definir o construtor diretamente na cabeça da classe.
  • Classes de Dados: Kotlin fornece um tipo especial de classe para armazenar dados com geração automática de equals(), hashCode(), toString(), copy() e componentN().
  • Classes Seladas: Kotlin suporta uma hierarquia limitada de classes, impedindo a criação de subclasses fora do pacote definido.
  • Delegação: Kotlin tem suporte nativo para delegar propriedades e interfaces.
  • Segurança Null: Kotlin introduz um sistema de tipos estrito para trabalhar com null, prevenindo NPE.

Tabela comparativa:

Característica Kotlin Java
Declaração de classe class MyClass (val property: Type) class MyClass { Type property; }
Construtor (Primário) Na cabeça da classe Método separado
Classe de Dados Suporte nativo (data class) Requer implementação manual / Lombok
Classe Selada Suporte nativo (sealed class) Não suportado
Delegação Suporte nativo (by) Requer implementação manual
Segurança Null Sistema de tipos estrito para null Permite null implícito

Exemplo de Classe de Dados em Kotlin:

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

Exemplo de classe equivalente em Java (sem usar bibliotecas adicionais):

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 +
               '}';
    }
}