Назад к вопросам
Junior
103
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