Kotlin java抽象类IllegalAccessError

时间:2017-05-02 13:45:24

标签: java kotlin kotlin-interop

我遇到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()
    }
}

2 个答案:

答案 0 :(得分:0)

您的代码如下:

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

class KotlinTest {
    val testHolder: TestHolder

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

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

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

在Kotlin中,您不必强迫您的文件位置与您的包名相匹配,因此包名不会导致“错误”,但会导致IllegalAccessException

答案 1 :(得分:0)

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

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

其他资源:

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