我想知道是否有一种方法可以知道对象是否是案例类的实例。我试图找到一些结构类型匹配unapply
,我注意到它们继承Product
。我真正需要的功能类似于:
def withCaseClass[T <: /* matcher for case class */](obj:T) ...
我的主要兴趣是确保只有案例类可以传递给这个函数。
Acase class
是实现细节。可以创建一个行为与案例类完全相同的类——并且这样做的能力是非常重要的,因为它可以确保如果某些特定要求使其成为更好的选择,则可以切换到普通类。
案例类或元组都没有标记特征,所以恐怕你最好的选择可能是检查它是否扩展了 Product 并且不在任何以“scala.*”开头的包中。:/
由于您可以“手动”执行编译器对案例类所做的完全相同的操作,并且因为生成的字节码将无法区分(这甚至是一个词吗?看起来很有趣......),所以您很不走运。真正的问题是:你为什么要关心?
在Java中我用过
Product.class.isAssignableFrom(someClassThatMayBeACaseClass);
检测某事是否为案例类。尽管很可能有些产品不是案例类。