Kotlin 的“内部”关键字 Java 互操作

问题描述

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

docs 中找到了这个:

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

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

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

internal class Foo(i : Int) {}

建了一个项目,解压jar包,用javap查看实际的类...它显示一个标准的公共类,原名:

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

我错过了什么吗?还是只是文档具有误导性?

文档提到内部类的成员,但我也尝试过:

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();
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...