Почему у любого в Kotlin есть только 3 метода, когда у объекта в Java есть 10+? - PullRequest
0 голосов
/ 20 апреля 2020

Из документации я знаю, что класс Any в Kotlin:

root иерархии Kotlin классов. Каждый Kotlin класс имеет [Любой] в качестве суперкласса.

Он выглядит буквально как Object в Java, в документах говорится:

Класс Object является root иерархии классов. У каждого класса есть Object как суперкласс. Все объекты, включая массивы, реализуют методы этого класса.

Я знаю, что underhood Any будет Object: я беру экраны с опциями «Декомпилировать». Поэтому я действительно не могу понять, если Any равен Object в конце, почему у Any есть только три метода, а у Object гораздо больше?

Какая причина была для этого?

enter image description here

enter image description here

1 Ответ

8 голосов
/ 20 апреля 2020

Многие из методов в java.lang.Object, в частности потоковые примитивы wait и notify (которые были почти полностью заменены потоковыми примитивами более высокого уровня) и наличие защищенного метода clone, рассматриваются как *. дизайнерские ошибки Java, а также других.

Некоторые ссылки:

Дизайнеры Kotlin решили не распространять эти ошибки в свой тип top .

Кроме того, благодаря наличию функций расширения легко «расширить» Any с помощью дополнительных функций верхнего уровня, которые могут вам понадобиться для вашего собственного проекта - например, большинство моих проекты содержат эти два метода, которые позволяют выполнять плавные приведения, а не броски в стиле скобок:

inline fun <reified T> Any.cast() = this as T
inline fun <reified T> Any.safeCast() = this as? T

Наконец, в то время как основное время выполнения Kotlin - это JVM (и JVM-подобные среды выполнения, такие как Android) которые представляют Kotlin Any как тип Object JVM Kotlin поддерживает компиляцию с другими бэкэндами, такими как JavaScript и собственный код. Учитывая это, еще более разумно, чтобы верхний тип языка был как можно более скудным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...