5

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

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

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

4

4 回答 4

7

Acase class是实现细节。可以创建一个行为与案例类完全相同的类——并且这样做的能力是非常重要的,因为它可以确保如果某些特定要求使其成为更好的选择,则可以切换到普通类。

于 2011-01-15T04:42:13.600 回答
2

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

于 2011-01-15T01:36:56.603 回答
2

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

于 2011-01-15T11:56:35.213 回答
0

在Java中我用过

Product.class.isAssignableFrom(someClassThatMayBeACaseClass);

检测某事是否为案例类。尽管很可能有些产品不是案例类。

于 2012-10-29T14:22:10.730 回答