我有一个数据类,用于manydifferent个位置:

data class Person(
  val name: String,
  val lastName: String
)

我想确保namelastName不包含空白(就像使用replace(" ", "")一样),我如何才能将其用于数据类?

理想的情况是这样(尽管我知道这是不可能的):

data class Person(
  val name: String.replace(" ", ""),
  val lastName: String.replace(" ", "")
)

推荐答案

一种方法可能是:

data class Person(
    private val name: String,
    private val lastName: String
) {
    fun getName() = name.replace(" ", "")
    fun getLastName() = lastName.replace(" ", "")
}

但这其实是一个更复杂的问题,为什么?因为您可能希望名称相同但空格模式不同的两个数据类被视为相等,对吗?在这一点上,数据类将失败,因为它将匹配精确的参数值,所以最好go 掉数据类关键字,根据您的用例只使用具有覆盖equals()hashcode()方法的普通老类.您也可以在数据类中覆盖这些方法,但这样使用"Data"类就没有多大意义了

Kotlin相关问答推荐

Kotlin—从列表中枚举属性计算不同值的数量

如何在Kotlin中为两个数据类创建可重用的方法?

"Kotlin中的表达式

Microronaut Data 4和JDbi

升级使用jOOQ Gradle插件生成代码失败

Kotlin:类型不匹配:推断的类型已运行,但应等待

使用事务时未调用 Kafka ConsumerInterceptor onCommit

为什么没有remember 的 mutableStateOf 有时会起作用?

使用纯 Kotlin 函数作为 Junit5 方法源

如何将 kotlin 集合作为 varagrs 传递?

Android Kotlin StringRes 数量String

将协同路由调用放在存储库或ViewModel中哪个更好?

Jacoco在Gradle 7.0.2和Kotlin 1.5.10上失败

类型不匹配:推断类型为 LoginActivity 但应为 LifecycleOwner

在 suspendCoroutine 块中调用挂起函数的适当方法是什么?

Kotlin - 如果不为空,则使用修改后的 Obj props 覆盖 Obj props

Kotlin - 错误:Could not find or load main class _DefaultPackage

在Kotlin中创建通用二维数组

Kotlin for assertThat(foo, instanceOf(Bar.class))

任务':app:kaptDebugKotlin'的Kotlin执行失败