abstract class Animal
case class Cat(name: String) extends Animal
case class Dog(name: String) extends Animal
假设我已经定义了 Cat 和 Dog,两个案例类。
然后我像这样使用它们:
val animal = createAnimal
animal match {
case Dog(anyName) => "this is a dog"
case Cat("kitty") => "this is a cat named kitty"
case _ => "other animal"
}
如果我将字节码反编译为 Java,我会得到如下信息:
Animal animal = createAnimal();
String result = "other animal";
if (animal instanceof Dog) {
result = "this is a dog";
} else if (animal instanceof Cat) {
Cat cat = (Cat) animal;
if (cat.name() == "kitty") {
result = "this is a cat named kitty";
}
}
return result;
编译器为 Cat 和 Dog 生成 unapply 方法,但它们不用于模式匹配代码。
这是为什么?