2

在 Kotlin 中是否可以直接访问在 Java 类中声明的公共支持字段,如果该类恰好具有该字段的相应 getter?例如,JDKjava.awt.Dimension有字段widthand height,它们是public,但也有getWidth()andgetHeight()方法(尽管它们返回doubles 而不是ints,所以它们不是严格的“对应”getter)。这是一个示例代码:

fun obtainWidth(): Int {
    val size = Dimension(1, 2)
    return size.width
}

Java 字节码清楚地显示了getWidth()被调用的方法,然后是一个double-to-int转换:

  public final static obtainWidth()I
   L0
    NEW java/awt/Dimension
    DUP
    ICONST_1
    ICONST_2
    INVOKESPECIAL java/awt/Dimension.<init> (II)V
    ASTORE 0
   L1
    ALOAD 0
    INVOKEVIRTUAL java/awt/Dimension.getWidth ()D
    D2I
    IRETURN

有趣的是,如果我替换widthgetWidth(),则代码无法编译,需要显式转换。

我使用 Kotlin v1.3.61

4

0 回答 0