我有一个有许多值的枚举;例如,错误代码,或一些官方的编码值列表.在我的应用程序中,我有几个函数,其中只有这些值的子集是允许的.如何派生仅包含原始枚举子集的受限枚举?
例如,我有一个外部提供的错误代码字典,其模型为enum:
enum class ApiError(val: errorCode: Int) {
INCORRECT_CHARACTER(1),
MISSING_VALUE(2),
TOO_SMALL(3),
TOO_LARGE(4)
}
在一个函数调用中,只会导致TOO_SMALL
和TOO_LARGE
错误,而在另一个函数调用中只会导致INCORRECT_CHARACTER
或MISSING_VALUE
错误.我不想为这些特定的错误返回值定义两个新的枚举,而是希望两者都以某种方式引用包含所有错误代码的完整枚举.
更精确地说:假设我有一个函数fun handleError(error: ApiError)
;在这个函数中,我希望能够编写一个涵盖所有枚举情况的详尽的when
模式匹配.然而,我also希望能够将受限枚举类型的参数传递给同一个函数,其中受限类型只能接受枚举值的子集,如上面的示例所示.
我想到的(但在Kotlin中不起作用)是对ApiError
枚举进行子类化,同时限制每个子类中的允许值.有没有类似的Kotlin解决方案?
相反的问题——将枚举子类化以进行扩展——已经详细讨论了here次.据我所知,在限制潜在枚举值时,反对意见并不适用.
出于好奇:我想上述问题是某种类型的理论问题的具体和完全错误的版本.有人能为正确的理论和术语提供指导吗?