【问题标题】:How can I identify when a Kotlin type will be mapped to a Java type?如何确定 Kotlin 类型何时映射到 Java 类型?
【发布时间】:2017-06-28 06:39:03
【问题描述】:

上下文

Kotlin 的kotlin.String 类型是currently defined as follows (1.1.2)

public class String : Comparable<String>, CharSequence {
    companion object {}

    // Operator and override function definitions.
}

kotlin.String 上定义的一些扩展将接收实例转换为java.lang.String 类型以转发方法调用。 For example (1.1.2):

@kotlin.internal.InlineOnly
public inline fun String.toLowerCase(): String = (this as java.lang.String).toLowerCase()

然而,kotlin.String 类型定义中的任何内容都没有让我清楚地知道,这个演员阵容一定会成功。

问题

  • 是否有任何方法可以轻松确定任何给定的 Kotlin 类型是否以这种方式映射到相应的 Java 类型?
  • 这种转换实际发生在哪里? (如果可能,寻找相关源代码的链接。)

【问题讨论】:

  • Where does this conversion actually happen? 这是什么意思? Kotlin 的String 基本上是Java 的java.lang.String 的类型别名
  • @Mibac 你怎么知道的?正如我在上面展示的那样,从源代码中并不明显,因此“别名”必须在某处发生。我正在寻找 where 部分:)
  • 我认为让字符串像 Java 字符串一样工作涉及到一些编译器魔法。不过我现在找不到它的文档。

标签: java jvm kotlin


【解决方案1】:

在 Kotlin/JVM 中,kotlin.Stringmapped types 之一 - 一种在运行时用一些现有 JDK 类表示的类型。

因此,kotlin.Stringjava.lang.String 之间的转换在运行时成功,即使从 Kotlin 类型系统的角度来看,它们是两个不相关的类型。

【讨论】:

猜你喜欢
  • 2018-06-19
  • 2016-08-18
  • 2015-02-24
  • 1970-01-01
  • 1970-01-01
  • 2013-05-30
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
相关资源
最近更新 更多