有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Kotlin java抽象类IllegaAccessError

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

java.lang.IllegalAccessError: tried to access class test.AbtractTest from class KotlinTest

相同代码的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) 个答案

  1. # 2 楼答案

    您的代码如下所示:

    fun main(args: Array<String>) {
        JavaTest()
        KotlinTest()
    }
    
    class KotlinTest {
        val testHolder: TestHolder
    
        init {
            testHolder = TestHolder()
            testHolder.test= Test()
        }
    }
    

    它不显示任何包声明

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

    在Kotlin中,您不会被迫使文件位置与包名匹配,因此没有包名不会导致“错误”,而是导致IllegalAccessException