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