Ответ 1
Нет.
Из документов Котлина (Emphasis mine)
Все классы в Котлин имеют общий суперкласс
Any
, что это супер по умолчанию для класса без каких - либо супертипов заявил:
class Example//Implicitly inherits from Any
Any
не являетсяjava.lang.Object
; в частности, он не имеет никаких элементов, кромеequals()
,hashCode()
иtoString()
. Для получения более подробной информации обратитесь к разделу совместимости Java.
Далее, из раздела о отображаемых типах мы находим:
Kotlin рассматривает некоторые типы Java специально. Такие типы не загружаются из Java "как есть", а отображаются на соответствующие типы Kotlin. Отображение имеет значение только во время компиляции, представление во время выполнения остается неизменным. Типы примитивов Javas сопоставляются соответствующим типам Kotlin (учитывая типы платформ):
...
java.lang.Object
kotlin.Any!
Это говорит о том, что во время выполнения java.lang.Object
и kotlin.Any!
обрабатываются одинаково. Но !
также означает, что тип является типом платформы, что имеет значение в отношении отключения нулевых проверок и т.д.
Любая ссылка в Java может быть нулевой, что делает требования Котлинса о строгой нулевой безопасности нецелесообразными для объектов, поступающих с Java. Типы объявлений Java обрабатываются специально в Kotlin и называются типами платформ. Null-чеки смягчены для таких типов, так что гарантии безопасности для них такие же, как в Java (см. Ниже).
...
Когда мы вызываем методы для переменных типов платформ, Kotlin не выдает ошибок с ошибкой при компиляции, но вызов может завершиться неудачно во время выполнения из-за исключения с нулевым указателем или утверждения, которое генерирует Kotlin для предотвращения распространения NULL: