0

我遇到了 java interop 和 Kotlin 的问题我有一个包保护的 java 抽象类,AbstractTest它被用作另一个类的成员,TestHolder。当我创建抽象类的派生实例Test并尝试在 kotlin 中使用它时,我得到:

java.lang.IllegalAccessError:试图从 KotlinTest 类访问类 test.AbtractTest

相同代码的 Java 版本似乎可以正常工作...

package test;

abstract class AbtractTest {
}

package test;

public class Test extends AbtractTest {
}

package test;

public class TestHolder {
    private AbtractTest test;

    public AbtractTest getTest() {
        return test;
    }

    public void setTest(AbtractTest test) {
        this.test = test;
    }
}

public class JavaTest {
    private TestHolder testHolder;

    public JavaTest() {
        testHolder = new TestHolder();
        testHolder.setTest(new Test());
    }
}

fun main(args: Array<String>) {
    JavaTest()
    KotlinTest()
}

class KotlinTest {
    val testHolder: TestHolder

    init {
        testHolder = TestHolder()
        testHolder.test= Test()
    }
}
4

2 回答 2

0

我遇到了同样的问题,发现这是 Kotlin 编译器中的一个错误。该问题在此处跟踪:

https://youtrack.jetbrains.com/issue/KT-1170

其他资源:

https://discuss.kotlinlang.org/t/kotlin-java-abstract-class-illegalaccesserror/2544/4

于 2019-07-24T22:20:34.170 回答
0

您的代码如下所示:

fun main(args: Array<String>) {
    JavaTest()
    KotlinTest()
}

class KotlinTest {
    val testHolder: TestHolder

    init {
        testHolder = TestHolder()
        testHolder.test= Test()
    }
}

其中没有显示任何包声明。

package test在这个文件的开头添加可能会解决这个问题。

在 Kotlin 中,您不必强制使文件位置与您的包名称匹配,因此没有包名称不会导致“错误”,但会导致IllegalAccessException.

于 2018-04-27T09:52:41.017 回答