Что является чистой альтернативой Kotlin 'javaClass'? - PullRequest
0 голосов
/ 03 июля 2019

Я реализую чистую библиотеку Kotlin, которую я буду выпускать по лицензии с открытым исходным кодом.В моей библиотеке, скажем, class A, в котором я хочу переопределить equals().Для этого я использовал автогенератор Android Studio, но там была ссылка на javaClass:

override fun equals(other: Any?): Boolean {
   if (this === other) return true
   if (javaClass != other?.javaClass) return false
   other as A
   ...
}

Безопасно ли использовать эту ссылку в чистой библиотеке Kotlin?Каков будет эффект, если кто-нибудь использует мою библиотеку, например, для работы с JavaScript?Есть ли чисто котлинская альтернатива javaClass?Я хотел бы избежать чего-то вроде

if (other !is A) ...

, потому что я не хочу, чтобы подклассы A регистрировались.

1 Ответ

3 голосов
/ 03 июля 2019

То, что вы сделали, небезопасно. Причина, по которой Android Studio сгенерировал этот код, заключается в том, что вы на самом деле не разрабатываете мультиплатформенный проект.

Мультиплатформенная версия будет выглядеть так:

override fun equals(other: Any?): Boolean {
    if (this === other) return true
    if (other == null || this::class != other::class) return false
    return true
}

Если ваша цель - иметь независимую от платформы библиотеку, разработайте ее как мультиплатформенный проект и поместите большую часть кода в модуль common.

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