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()
}
}
# 1 楼答案
我遇到了同样的问题,发现这是Kotlin编译器中的一个bug。问题可在此处追踪:
https://youtrack.jetbrains.com/issue/KT-1170
其他资源:
https://discuss.kotlinlang.org/t/kotlin-java-abstract-class-illegalaccesserror/2544/4
# 2 楼答案
您的代码如下所示:
它不显示任何包声明
在这个文件的开头添加
package test
可能会解决这个问题在Kotlin中,您不会被迫使文件位置与包名匹配,因此没有包名不会导致“错误”,而是导致
IllegalAccessException