Невозможно получить доступ к члену из унаследованного Java-класса снаружи в kotlin - PullRequest
0 голосов
/ 02 января 2019

Я очень новичок в Kotlin, я пытался перенести свой Java-проект на Kotlin, и я столкнулся с проблемой, когда я не могу получить доступ к неявным унаследованным членам из моего класса.

В Java у меня был класс с именем Robot.java, который простирается от TimedRobot.java, а внутри TimedRobot.java есть статический член двойного типа

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()
    ...
}

1 Ответ

0 голосов
/ 02 января 2019

Вы можете использовать фактическую TimedRobot.DEFAULT_PERIOD константу или переопределить ее с помощью объекта-компаньона:

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

Другая возможность состоит в том, чтобы представлять эти значения как поля верхнего уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...