kotlin - Kotlin - 数据类类型字符串或一些对象
问题描述
假设我在 Kotlin 中有这个数据类:
@Document(collection = Approval.COLLECTION)
data class Approval(
@Id
val id: String,
val detailId: <UNSURE HERE>
) {
companion object {
const val COLLECTION: String = "approval"
}
}
这detailID
可以是一个String
或这样的对象:
data class AIDConfiguration(
val sId: String,
val cId: String
)
但是如何设置该类型 - 因为我不能使用类似的东西
val detailId: AIDConfiguration | String
我想可能会做一个接口,但不确定是否有任何语法让它只是一个字符串
interface ParentConfiguration
data class AIDConfiguration(
val sId: String,
val cId: String
): ParentConfiguration
接着
val detailId: ParentConfiguration
任何帮助表示赞赏。
谢谢。
解决方案
一种方法可能是:
val detailId: Any
这是松散的,因为它将允许将任何类型分配给 detailId。因此,在使用之前,您必须检查类型。
fun useConfig(detailId: Any) {
if (detailId is AIDConfiguration) {
//Use detailId.sId and detailId.cId. Compiler smart casts to AIDConfiguration
} else if (detailId is String)
//Use detailId. Compiler will smart cast to String
} else {
//throw some exception here.
}
}
您可能还想在设置配置时使用一些验证。检查类型是AIDConfiguration
还是String
。
更严格一点是有一个父配置类。例如ParentConfiguration
和具有AIDConfiguration
和StringConfiguration
作为子类。
那么它就变成了:
interface ParentConfiguration
data class AIDConfiguration(
val sId: String,
val cId: String
): ParentConfiguration
data class StringConfiguration(
val conf: String
): ParentConfiguration
data class Approval(
val id: String,
val detailId: ParentConfiguration
)
val stringConfigApproval = Approval(id = "Test1", detailId = StringConfiguration("String Conf"))
val aidConfApproval = Approval(id = "Test2", detailId = AIDConfiguration(sId = "SID", cId = "CID"))
建议查看 kotlin 文档。
https://kotlinlang.org/docs/tutorials/kotlin-for-py/inheritance.html https://kotlinlang.org/docs/reference/typecasts.html
推荐阅读
- c# - 使用 Stimulsoft 和 C# 创建打印页面
- php - 返回主页时检查会话是否存在
- c++ - 无法从输入文件中的 C++ 文件中读取 utf-8 字符
- python - 如何解决“没有这样的文件或目录”?[LPTHW 第 17 章示例]
- javascript - 引导吐司不显示
- c# - ASP.NET Core 无法使用 RazorViewEngine 通过路径找到 cshtml 文件
- python - 可以创建不导入 __main__ 模块的 Python 多处理子/工作进程吗?
- facebook - 如何获取页面公共内容访问权限?
- swift - 试图将注释从一个视图控制器传递到另一个
- php - 如何使用codeigniter将参数传递给自定义库?