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