我试图弄清楚从 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();
}