Kotlin Java абстрактный класс IllegalAccessError

У меня проблема с взаимодействием Java и Kotlin. У меня есть защищенный пакет абстрактный класс Java, AbstractTest, который используется в качестве члена в другом классе, TestHolder, Когда я создаю производный экземпляр абстрактного класса, Testи попробуйте использовать его в kotlin я получаю:

java.lang.IllegalAccessError: попытался получить доступ к классу test.AbtractTest из класса 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()
    }
}

1 ответ

Ваш код выглядит так:

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

class KotlinTest {
    val testHolder: TestHolder

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

Который не показывает никакого объявления пакета.

Добавление package test в начале этого файла, вероятно, это решит.

В Kotlin вы не обязаны делать так, чтобы местоположение вашего файла совпадало с именем вашего пакета, поэтому никакое имя пакета не вызовет "ошибку", но приведет к IllegalAccessException,

Я столкнулся с той же проблемой и обнаружил, что это ошибка в компиляторе Kotlin. Проблема отслеживается здесь:

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

Другие источники:

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

Другие вопросы по тегам