Разрешение ошибок случайного перекрытия в Котлине

Я недавно начал истекать с Kotlin и начал проект Spring Boot pet с использованием Kotlin.

Я пытаюсь интегрировать пользовательский объект домена пользователя в Spring Security и, следовательно, хочу реализовать интерфейс UserDetails .

С учетом объекта моего домена User ниже:

import org.springframework.data.annotation.Id as DocumentId import org.springframework.data.mongodb.core.mapping.Document import org.springframework.security.core.GrantedAuthority import org.springframework.security.core.authority.AuthorityUtils import org.springframework.security.core.userdetails.UserDetails @Document data class User(@DocumentId val id: String? = null, val username: String = "", val password: String = "", val email: String = "", val name: String? = null, val surname: String? = null) : UserDetails { override fun isCredentialsNonExpired(): Boolean = true override fun isAccountNonExpired(): Boolean = true override fun isAccountNonLocked(): Boolean = true override fun getAuthorities(): MutableCollection<out GrantedAuthority> = AuthorityUtils.createAuthorityList("USER") override fun isEnabled(): Boolean = true } 

Я получаю следующие ошибки:

  1. Случайное переопределение: следующие объявления имеют одну и ту же подпись JVM (getUsername () Ljava / lang / String;): public final fun <get-username> (): Kotlin.String, public abstract fun getUsername (): Kotlin.String!

  2. Случайное переопределение: следующие объявления имеют одну и ту же подпись JVM (getPassword () Ljava / lang / String;): public final fun <get-password> (): Kotlin.String, public abstract fun getPassword (): Kotlin.String!

Поскольку у моего класса User уже есть метод getUsername (): Kotlin.String также реализует метод getUsername (): Kotlin.String! ?

Как я могу разрешить такую ​​ошибку, кроме использования @JvmName в getter и setter свойства?

    Проблема здесь в том, что свойство getter не может переопределить функцию из супертипа, с точки зрения Котлина. Чтобы обойти это, вы можете запретить компилятору генерировать геттеры, сделав ваши свойства private и внедрить требуемые методы из супертипов вручную, например:

     data class User( private val username: String = "" ... ): UserDetails { override fun getUsername() = username ... } 
    Interesting Posts
    Давайте будем гением компьютера.