Scala:如何检查是否至少定义了一个类的字段?

标签 scala reflection field option-type

我有一个类,它有几个可选字段,如下所示:

class Container(f1: Option[String] = None,
                f2: Option[Boolean] = None,
                f3: Option[Int] = None,
                f4: Option[String] = None
                // ... 30 other fields which is unfortunate/terrible and
                // cannot be changed at the moment
                 ) {
  def hasAtleastOneDefinedField: Boolean = {
    this.f1.isDefined ||
      this.f2.isDefined ||
      this.f3.isDefined ||
      this.f4.isDefined
    // this is too-much of boilerplate
  }

  // This is something along the lines of what I want
  def hasAtleastOneDefinedField2: Boolean = {
    // this.getAllDeclaredFields.find(field => field.value.isDefined)
    ???
  }
}

是否可以在不使用反射的情况下做同样的事情?

最佳答案

不确定这能为您节省多少,但是:

  val hasAtLeastOneDefinedField = List(f1, f2, f3, ..., f35).exists { _.isDefined }

不要认为除了反射/宏之外还有其他方法。

关于Scala:如何检查是否至少定义了一个类的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32084618/

相关文章:

scala - 如何使用 Scala 特化提供手动特化的实现?

java - 在 Java 中按名称设置变量

javascript - 使用小书签用字符串填充页面上的每个字段

ScalaTest 相当于 JUnit Rule 临时文件夹?

json - 为 JSON 集类型定义 `Reads`

java - 创建日期范围 Scala、Joda、Java

c# - 如何在实例化对象上使用反射调用方法?

haskell - Haskell 反射中的黑魔法

java - 使用带有键对象参数的方法修改类实例字段

mysql - 用户自定义字段 PHP Mysql