Back to questions
Junior
212
questionbank
Какие ключевые особенности Kotlin отличают его от Java?
Answer from AI
sobes.tech AI
Корутины, расширения, null safety, data классы, более лаконичный синтаксис для многих конструкций (например: лямбда-выражения, условные операторы, итерации).
| Особенность | Kotlin | Java |
|---|---|---|
| Null Safety | Встроенная поддержка на уровне системы типов. | Может возникнуть NullPointerException в runtime. |
| Расширения | Возможность добавлять новые функции к существующим типам без наследования. | Нет прямой поддержки. |
| Корутины | Лековесные потоки для асинхронного программирования. | Традиционные тяжелые потоки (или сторонние библиотеки, как Project Loom). |
| Data Классы | Автоматически генерируют equals(), hashCode(), toString(), copy(). |
Необходимо реализовывать вручную (или использовать Lombok). |
| Смарт-Касты | Компилятор автоматически выполняет приведение типов после проверки их типа. | Требуется явное приведение типов. |
| Лямбда-выражения | Более лаконичный синтаксис. | Более многословный синтаксис. |
| Вложенные классы | Внутренние классы по умолчанию вложенные (nested). |
Внутренние классы по умолчанию внутренние (inner). |
| Mutable/Immutable | Разделение коллекций на изменяемые и неизменяемые. | Нет явного разделения в самой системе типов коллекций. |
| Operator Overloading | Поддержка перегрузки операторов. | Нет поддержки. |
// Пример data-класса
data class User(val name: String, val age: Int)
// Пример расширения
fun String.addExclamation(): String = this + "!"
// Пример null-safety
var nullableString: String? = null
// nullableString.length // Ошибка компиляции, если не проверен
// Пример корутины
import kotlinx.coroutines.*
fun main() = runBlocking {
launch { // Запускает новую корутину и продолжает
delay(1000L) // Неблокирующая задержка на 1 секунду (по умолчанию time unit is ms)
println("World!")
}
println("Hello") // Основная корутина продолжается, пока запускается дочерняя
}
// Эквивалент data-класса в Java (без Lombok)
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; }
// Требуется вручная реализация equals(), hashCode(), toString()
}
// NullPointerException в Java
String nullableString = null;
// int length = nullableString.length(); // Runtime Exception: NullPointerException