无法从Kotlin外部的继承的Java类访问成员

时间:2019-01-02 07:48:44

标签: java inheritance kotlin

我对Kotlin还是很陌生,我试图将Java项目迁移到kotlin,但遇到了一个问题,即我无法从类中访问隐式继承的成员。

在Java中,我有一个名为Robot.java的类,它是从TimedRobot.java扩展而来的,在TimedRobot.java内有一个静态成员,它是一种double类型

public class Robot extends TimedRobot {
}

TimedRobot.java来自库:

public class TimedRobot extends IterativeRobotBase {
    public static final double DEFAULT_PERIOD = 0.02;
    private double m_period = DEFAULT_PERIOD;
    ...
}

在与Robot.java相同的包中,我有一个名为RobotConstants.java的类,其中包含一些数字。即使在我的机器人类中没有名为DEFAULT_PERIOD的变量,我仍然可以像这样从外部调用它:

public class RobotConstants {
    public static final int PERIOD_IN_MS = (int)(Robot.DEFAULT_PERIOD * 1000);
    ...
}

但是我无法在Kotlin中做到这一点。

我在科特林的机器人课:

class Robot : TimedRobot() {
}

我无法在kotlin的常量对象中获得默认期限,这给了我编译时错误。这是我正在尝试做的事情:

object RobotConstants {
    const val PERIOD_Ms = (Robot.DEFAULT_PERIOD * 1000).toInt()
    ...
}

2 个答案:

答案 0 :(得分:0)

您可以使用实际的TimedRobot.DEFAULT_PERIOD常量,也可以通过伴随对象重新定义它:

class Robot : TimedRobot() {
    companion object {
        const val DEFAULT_PERIOD = TimedRobot.DEFAULT_PERIOD
    }
}

另一种可能性是将这些值表示为顶级字段。

答案 1 :(得分:0)

如果它仍然像我一样出现错误,解决方案是将@JvmField 注释放在字段上