Как получается kotlin.Char Сериализуемый?(это не определено явно) - PullRequest
0 голосов
/ 28 октября 2018

kotlin.Char определяется следующим образом:

public class Char private constructor() : Comparable<Char> {
...
}

Где Comparable<T> определяется как:

public interface Comparable<in T> {
    public operator fun compareTo(other: T): Int
}

Так как получается, что Char равен Serializable?

fun main(args: Array<String>) {
  println('A'::class) // class kotlin.Char
  println('A'::class.java) // char
  println('A' is java.io.Serializable) // true
}
  • Это что-то добавлено при компиляции в байт-код?
  • Это где-нибудь задокументировано?

1 Ответ

0 голосов
/ 28 октября 2018

Основные типы, такие как Int, Double, Char и т. Д., Представлены в JVM одним из двух способов ( документация ):

  • всякий раз, когда это возможно, в качестве примитивов (int, double, char),
  • , когда требуется обнуляемость или при использовании в качестве параметров универсального типа, в качестве соответствующих классов-оболочек (Integer, Double, Character).

Оба эти представления являются сериализуемыми.Примитивные типы по умолчанию являются сериализуемыми, и все их оболочки также реализуют Serializable, например, как вы можете видеть в документации Character.

Этот видо сопоставлении между типами Kotlin и Java также упоминается здесь в документации по взаимодействию Java.

Таким образом, вопрос в том, почему представления Kotlin не имеют Serializable в качестве супертипа науровень исходного кода?Я предполагаю, что они остаются независимыми от платформы, так как их явная реализация java.io.Serializable заставит их напрямую зависеть от типа JVM.

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