Ответ
Плюсы:
- Уменьшает boilerplate код (например, Room, Dagger)
- Повышает производительность (генерируется во время компиляции)
- Снижает вероятность ошибок (код генерируется автоматически)
Минусы:
- Усложняет дебаг (стектрейсы указывают на сгенерированный код)
- Увеличивает время сборки (особенно при clean build)
- Может быть "магией" для новичков (неочевидно, как работает)
Пример с Room:
@Dao
interface UserDao { // Мы пишем только интерфейс
@Query("SELECT * FROM users")
fun getAll(): List<User>
}
// Реализация генерируется автоматически