Junior
Jaké změny nastaly v tvorbě tříd mezi Kotlinem a Javou?
sobes.tech AI
Odpověď od AI
Hlavní změny mezi Kotlinem a Javou při vytváření tříd:
- Syntaxe: Kotlin má stručnější a výstižnější syntaxi pro definici tříd.
- Primární konstruktor: Kotlin umožňuje definovat konstruktor přímo v hlavičce třídy.
- Datové třídy: Kotlin poskytuje speciální typ třídy pro ukládání dat s automatickou generací
equals(),hashCode(),toString(),copy()acomponentN(). - Uzavřené třídy (Sealed Classes): Kotlin podporuje omezenou hierarchii tříd, která zabraňuje vytváření podtříd mimo daný balíček.
- Delegování: Kotlin má nativní podporu delegování vlastností a rozhraní.
- Null Safety: Kotlin zavádí přísný systém typů pro práci s null, čímž předchází NPE.
Srovnávací tabulka:
| Vlastnost | Kotlin | Java |
|---|---|---|
| Ohlášení třídy | class MyClass (val property: Type) |
class MyClass { Type property; } |
| Primární konstruktor | V hlavičce třídy | Samostatná metoda |
| Datová třída | Nativní podpora (data class) |
Vyžaduje ruční implementaci / Lombok |
| Uzavřená třída (Sealed) | Nativní podpora (sealed class) |
Nepodporováno |
| Delegování | Nativní podpora (by) |
Vyžaduje ruční implementaci |
| Null Safety | Přísný systém typů pro null | Umožňuje implicitní null |
Příklad datové třídy v Kotlin:
data class User(val name: String, val age: Int)
Příklad ekvivalentní třídy v Javě (bez použití dalších knihoven):
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 +
'}';
}
}