我是第一次玩Scala,所以请耐心等待。还使用 tapir 来声明 API,我在为枚举提供架构时遇到问题。
我定义了一堆枚举,它们是我的域模型的一部分,并扩展了Scala的枚举
。例如,这是其中之一:
object Status extends Enumeration with JsonEnumeration {
val Active, Completed, Archived, Deleted = Value
}
并且还有许多使用它们的案例类。例如,Order
使用我们之前定义的枚举,例如:
case class Order(
id: String,
name: Option[String],
status: Status.Value,
)
我想让这个枚举实现一个添加隐式但又不修改原始状态枚举的特征(我不想将状态
枚举 - 以及所有其他枚举 - 耦合到这个特征)。
特征如下所示:
import sttp.tapir.{Schema, Validator}
trait TapirEnumeration { e: Enumeration =>
implicit def schemaForEnum: Schema[e.Value] =
Schema.string.validate(Validator.enumeration(e.values.toList, v => Option(v)))
}
我想以某种方式修改 Order
对象,以便 Status 枚举现在是一个 TapirStatus 枚举(或类似的东西),它扩展了原始 Status 和 TapirEnumeration
,但我认为这是不可行的,因为
Status
最初被定义为一个配套对象。
理想情况下,我希望作为API响应公开的所有枚举都将实现< code > taperinumeration 特征,同时仍然扩展它们已经扩展的内容。
我能做些什么来实现这一点?当然,创建一个实现trait的新enum并不枯燥,所以它不是一个选项。
为什么首先需要在枚举本身中定义隐式?让它有自己的定义。
import scala.language.implicitConversions
object EnumImplicits {
implicit def schema[E <: Enumeration](e: E): Schema[e.Value] = ???
}
然后,无论您在哪里需要访问该隐式内容,只需通过导入EnumImplicits._
使其可用
这里有一个例子
我试图在Enum上做一点反向工程。 接口内的枚举实现-Java
问题内容: 这不是卡住我的问题,而是我正在寻找一种编写代码的整洁方法。 本质上,我正在编写一个事件驱动的应用程序。用户触发一个事件,该事件被发送到适当的对象,然后这些对象处理事件。现在,我正在编写偶数处理程序方法,并且希望使用switch语句确定如何处理事件。现在,在我研究通用结构时,事件类非常简单: 然后,在另一堂课中,我会看到类似以下内容的内容: 我会 喜欢 做的就是这样的事情(尽管我当然会坚
问题内容: 例如,我该怎么做: 结果示例: 问题答案: 迅捷4.2+ 从Swift 4.2(使用Xcode 10)开始,只需添加协议一致性即可从中受益。要添加此协议一致性,您只需要在某处写: 如果枚举是您自己的,则可以直接在声明中指定一致性: 然后,以下代码将打印所有可能的值: 与早期Swift版本(3.x和4.x)的兼容性 如果您需要支持Swift 3.x或4.0,则可以通过添加以下代码来模仿S
springdoc-openapi项目中存在关闭问题#1101,该问题请求允许影响枚举序列化。然而,这个问题已经结束,因为没有为它提交公关。 如何使枚举列表匹配RESTendpoint接受/返回的实际JSON类型,而不是值? 解决这个问题的第一个想法是使用来自Swagger Core的注释。然而,不管是出于bug还是出于设计,这都是对值列表的添加,而不是替换: Swagger URL:
我不得不说我不理解Scala枚举类。我可以从文档中复制粘贴示例,但我不知道是怎么回事。 什么是?为什么我必须写这个? 为什么?这到底是什么意思? 为什么必须导入对象?并且, 当我编写时,为什么要键入,而不是键入?
问题内容: 我想知道在Java中是否可以嵌套枚举。 在这里,我想做的是: 拥有一个由CAT和DOG组成的物种,将允许我访问可用CAT和DOG品种的子枚举。例如,我希望能够测试是否装有CAT或DOG,以及动物是否是PERSAN CAT或PITBULL狗。CAT和DOG品种必须是不同的枚举,即CatBreeds枚举和DogBreeds枚举。 这是我要使用的访问模式的示例: 种类: 物种 种狗 品种: