Переопределить Java интерфейс только с получателями в Kotlin - PullRequest
3 голосов
/ 10 февраля 2020

У меня есть этот интерфейс в Java:

public interface ErrorInfo {
  String getCode();
  String getMessage();
}

И я хочу переопределить его в Kotlin коде. Кажется, я не могу этого сделать.

Вот что я попробовал:

Здесь я получаю сообщение об ошибке '<field> overrides nothing'

class ErrorInfoImpl(
  override val code: String,
  override val message: String
) : ErrorInfo

Здесь я получаю та же ошибка '<field> overrides nothing'

class ErrorInfoImpl(
  code: String,
  message: String
) : ErrorInfo {
   override val code: String = code
   override val message: String message
}

Этот код работает, но выглядит грязно:

class ErrorInfoImpl(
  private val __code: String,
  private val __message: String
) : ErrorInfo {
    override fun getCode(): String = __code
    override fun getMessage(): String = __message
}

Есть ли лучшие способы сделать это?

1 Ответ

1 голос
/ 10 февраля 2020

Контракт должен иметь только методы getCode() и getMessage(). То, что он возвращает, зависит от реализации класса. Самым чистым в этом случае является следующее:

class ErrorInfoImpl(
  private val code: String,
  private val message: String
) : ErrorInfo {
    override fun getCode(): String = code
    override fun getMessage(): String = message
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...