Переопределить интерфейс Java только с геттерами в Kotlin

У меня есть этот интерфейс на 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 ответ

Решение

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

class ErrorInfoImpl(
  private val code: String,
  private val message: String
) : ErrorInfo {
    override fun getCode(): String = code
    override fun getMessage(): String = message
}
Другие вопросы по тегам