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