我对 Kotlin 比较陌生,最近开始将一些 Java 项目转换为 Kotlin 进行练习。我知道 Java 代码正在运行,但我在运行 Kotlin 端口时遇到问题。看起来 Kotlin 无法像 Java 那样访问 Java 类。
我在 Java 库中有一个类,如下所示:
package foo.bar.utils;
import java.util.List;
import java.util.ArrayList;
public class Foo {
private List<Bar> bars;
public Foo() {
bars = new ArrayList<>();
}
static public class Bar {
private Qux quxs;
public Qux getQuxs() {
return quxs;
}
public Bar setQuxs(final Qux quxs) {
this.quxs = quxs;
return this;
}
static class Qux {
@Override
public String toString() {
return "Qux []";
}
}
static public class QuxClass extends Qux {
private String id;
public String getId() {
return id;
}
public QuxClass setId(final String id) {
this.id = id;
return this;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
工作的 Java 代码如下所示:
package com.example;
import foo.bar.utils.Foo;
public class JavaMain {
public static void main(String... args) {
Foo.Bar bar = new Foo.Bar();
Foo.Bar.QuxClass qux = new Foo.Bar.QuxClass();
bar.setQuxs(qux);
System.out.println(bar);
}
}
Run Code Online (Sandbox Code Playgroud)
非工作的 Kotlin 代码如下所示:
package com.example
import foo.bar.utils.Foo
fun main() {
val bar = Foo.Bar()
val qux = Foo.Bar.QuxClass()
bar.quxs = qux
println(bar)
}
Run Code Online (Sandbox Code Playgroud)
我省略了(我相信)重现此问题所不需要的代码。
Kotlin 代码实际上可以编译,但在运行时,它会抛出Exception in thread "main" java.lang.IllegalAccessError: tried to access class foo.bar.utils.Foo$Bar$Qux from class com.example.MainKt. 当将鼠标悬停在 上时,IntelliJ 显示bar.quxs一个提示,Type Foo.Bar.Qux! is inaccessible in this context due to: public/*package*/ open class Qux defined in foo.bar.utils.Foo.Bar但我很难理解该提示。
一个可能的修复方法是将内部类 Qux 的可访问性更改为 public。
我尝试了 OpenJDK 12 和 Amazon Corretto 8,结果相同。
我还尝试检查 Kotlin 和 Java 代码的反编译代码,但没有发现任何值得注意的差异。
调用 setQuxs() 也没有帮助。
有没有办法改变我的 Kotlin 代码来让端口运行?我真的很想了解 Kotlin 为什么会这样。
小智 0
New 关键字不适用于在 Kotlin 中创建对象,您可以像这样添加导入
import foo.bar.utils.Foo.Bar
import foo.bar.utils.Foo.Bar.QuxClass
Run Code Online (Sandbox Code Playgroud)
然后创建像这样的对象
val bar = Bar()
val qux = QuxClass()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1460 次 |
| 最近记录: |