我(通常)有一个具有两个状态的资源,即创建前和创建后两个状态,其中两个状态除字段外均具有相同的id
字段。id
在创建前的状态下为null,在创建后的状态下为非null。
我想以一种干净且类型安全的方式定义和使用此资源。
通常将此ID字段表示为可为空,这可以在类定义中以最少的样板处理两种情况。问题在于它在业务逻辑中创建了很多样板,因为您无法通过查看资源的类型来断言资源是预先创建的还是后期创建的。
这是可为空方法的示例:
data class Resource(val id: String?, val property: String)
这很容易定义,但由于缺乏编译时保证,因此处理起来并不简单。
这是一个更类型安全的方法的示例:
sealed class Resource(val property: String) {
class WithoutID(property: String): Resource(property)
class WithID(val id: String, property: String): Resource(property)
}
Run Code Online (Sandbox Code Playgroud)
这使我可以绕过Resource.WithID
和Resource.WithoutID
,除了之外,它们具有所有相同的字段和方法id
。
这种类型安全的方法的一个不便之处是,当您有很多property
字段时,资源定义代码就会变得肿。这种膨胀使代码更难阅读。
我想知道是否有另一种方法来减少样板,或者Kotlin是否具有使这种事情变得更简单的功能。
kotlin ×1