假设我有一个看起来像这样的特征
trait MyTrait {
val x: Option[String] = None
val y: Option[String] = None
}
Run Code Online (Sandbox Code Playgroud)
发布定义特征我将此特征扩展到一个MyClass
看起来像这样的类
case class MyClass(
override val x: Option[String] = None,
override val y: Option[String] = None,
z: Option[String] = None
) extends MyTrait
Run Code Online (Sandbox Code Playgroud)
现在我需要查找除了由MyTrait
is not扩展的属性之外的任何其他属性None
。从某种意义上说,如果我需要编写一个被调用的方法,该方法getClassInfo
根据案例类中存在的值返回真/假。在这种情况下,如果z
是非可选的,它应该返回 true 。我getClassInfo
的事情是这样的
def getClassInfo(myClass: MyClass): Boolean = {
myClass
.productIterator
.filterNot(x => x.isInstanceOf[MyTrait])
.exists(_.isInstanceOf[Some[_]])
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,这应该过滤掉所有不属于的字段,Mytrait
并z
在这种情况下返回我。我尝试使用方差,但似乎isInstanceOf
不一样
filterNot(x => x.isInstanceOf[+MyTrait])
Run Code Online (Sandbox Code Playgroud)
然而这是不可能的
val a …
Run Code Online (Sandbox Code Playgroud)