给定一个 A
,它可能有可选字段,a
和 b
:
案例类 A(a: Option[Int], b: Option[String])
我可以将 A
定义为 Algebraic Data Type .
但是,它需要 4 个子类来解释每个 None/Option
选择:
sealed trait AADT
case class Aa(a: Int) extends AADT
case class Aab(a: Int, b: String) extends AADT
case class Ab(b: String) extends AADT
case object Neither extends AADT
我认为这个 ADT 比上面的 A
选项更可取,后者具有 Option
类型。
但是,对于 3、4 等字段,这种类型可能很快就会失控。
是否有第三种方法来实现 A
,即不使用我的第一个或第二个实现?
最佳答案
从代数上讲,有第三个选项涵盖所有组合
sealed trait A
case class Ao(o: Option[(Int, String)]) extends A //all or none
case class Ae(e: Either[Int, String]) extends A //first or second
如果每种情况都有单独的域名,我肯定会选择某种 ADT。
可选字段适用于数据传输对象 (DTO)
关于scala - 可选字段,ADT,还是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39131289/