Sobes.tech
Junior

Kotlin va Java o'rtasida sinf yaratishda qanday o'zgarishlar bo'ldi?

sobes.tech AI

AIdan javob

Kotlin va Java o'rtasidagi sinflarni yaratishda asosiy o'zgarishlar:

  • Sintaksis: Kotlin sinflarni aniqlash uchun qisqaroq va ifodali sintaksisga ega.
  • Asosiy Konstruktor: Kotlin konstruktorni to'g'ridan-to'g'ri sinf sarlavhasida aniqlash imkonini beradi.
  • Ma'lumot Sinflari: Kotlin ma'lumotlarni saqlash uchun maxsus sinf turini taqdim etadi, u equals(), hashCode(), toString(), copy() va componentN() ni avtomatik ravishda generatsiya qiladi.
  • Yopiq Sinflar: Kotlin cheklangan sinf hierarhiyasini qo'llab-quvvatlaydi, bu esa belgilangan paketdan tashqarida subklasslar yaratishni oldini oladi.
  • Delegatsiya: Kotlin xususiyatlar va interfeyslarni delegatsiya qilish uchun tabiiy qo'llab-quvvatlashga ega.
  • Null Xavfsizligi: Kotlin null bilan ishlash uchun qat'iy tur tizimini joriy qiladi, bu NPE ni oldini oladi.

Taqqoslash jadvali:

Xususiyat Kotlin Java
Sinf e'lon qilish class MyClass (val property: Type) class MyClass { Type property; }
Asosiy Konstruktor Sinf sarlavhasida Alohida metod
Ma'lumot Sinfi Tabiiy qo'llab-quvvatlash (data class) Qo'lda amalga oshirish / Lombok bilan
Yopiq Sinf Tabiiy qo'llab-quvvatlash (sealed class) Qo'llab-quvvatlanmaydi
Delegatsiya Tabiiy qo'llab-quvvatlash (by) Qo'lda amalga oshirish kerak
Null Xavfsizligi Qat'iy tur tizimi null bilan Ruxsat etilgan null

Kotlin'da Data Class misoli:

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

Java'da tenglashtirilgan sinf (qo'shimcha kutubxonalar ishlatilmasdan):

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