1

我试图弄清楚从 Java 的角度来看内部类会发生什么。

在文档中找到了这个:

内部类的成员会经过名称修改,以便更难在 Java 中意外使用它们,并允许根据 Kotlin 规则重载具有相同签名但彼此看不到的成员

所以我很想看看它在实践中的样子。

我创建了一个简单的 Kotlin 类:

internal class Foo(i : Int) {}

建了一个项目,解压jar,用javap看了一下实际的类……它显示了一个标准的公共类,原来的名字:

Compiled from "Foo.kt"
public final class Foo {
    public Foo(int);
} 

我错过了什么吗?还是仅仅是误导性的文档?

文档提到了 internal classes 的成员,但我也尝试过:

internal class Foo(someInt : Int) {
    var someString : String
        get() {
            TODO()
        }
        set(value) {}

    fun foo() { }

    class Bar { }
}

并得到了预期的输出:

Compiled from "Foo.kt"
public final class Foo {
  public Foo(int);
  public final java.lang.String getSomeString();
  public final void setSomeString(java.lang.String);
  public final void foo();
}

和:

Compiled from "Foo.kt"
public final class Foo$Bar {
  public Foo$Bar();
}
4

0 回答 0