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