Назад к вопросам
Junior
104
questionbank
Какие ключевые особенности Kotlin отличают его от Java?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
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