Ответ
Плюсы:
- Гибкость: доступ к приватным полям/методам, динамический вызов методов
- Интроспекция: анализ классов во время выполнения
- Полезно для библиотек (DI, сериализация)
Минусы:
- Производительность: медленнее прямого вызова (~50x)
- Безопасность: обход инкапсуляции
- Сложность: код становится хрупким, сложно поддерживать
Пример:
class Secret {
private val secretCode = 123
}
fun main() {
val field = Secret::class.java.getDeclaredField("secretCode")
field.isAccessible = true
println(field.get(Secret())) // 123
}
Используйте осторожно, только когда нет других вариантов.