知道Scala对象是否是Case Class的实例

时间:2011-01-15 01:29:21

标签: scala typing

我想知道是否有办法知道对象是否是案例类的实例。我试图找到一些匹配unapply的结构类型,我注意到它们继承了Product。我真正需要一个类似于:

的函数
def withCaseClass[T <: /* matcher for case class */](obj:T) ...

我的主要兴趣是确保只有案例类可以传递给这个函数。

4 个答案:

答案 0 :(得分:7)

case class是一个实现细节。可以创建一个类似于案例类的类 - 并且这样做的能力是非常重要的,因为它确保一个可以切换到普通类,如果某些特定要求使得更好的选择。

答案 1 :(得分:2)

对于案例类或元组都没有标记特征,所以我担心你最好的选择是检查它是否扩展了Product并且不在任何以“scala。*”开头的包中。 :/

答案 2 :(得分:2)

正如您可以完全相同的“手动”编译器为案例类所做的事情,并且因为生成的字节码无法区分(这甚至是一个单词?看起来很有趣......),你运气不好。真正的问题是:你为什么要关心?

答案 3 :(得分:0)

在Java中,我使用了

Product.class.isAssignableFrom(someClassThatMayBeACaseClass);

检测是否有案例类。虽然可能有些产品不属于案例类别。