与hibernate代理匹配的Scala模式不适用于继承对象列表。要解决这个问题,我在案例类中包装了hibernate对象,请参阅http://oletraveler.com/2011/04/20/20/
如果有人试图在继承的hibernate实体上进行匹配,我想要完成的是抛出编译时错误(首选)或运行时错误。
例如:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
class PaymentSource
@Entity
class CreditCard
@Entity User {
var paymentSources: java.util.ArrayList
}
user.paymentSources.map(_ match {
case cc: CreditCard => println("oops") // <- this should error
})
我尝试在CreditCard上覆盖unapply,但是这不起作用,因为只有在解构对象时调用unnapply,而不仅仅是在实例上进行匹配。
有没有?
答案 0 :(得分:6)
我真的没有看到任何纯粹在代码中实现这一点的方法:
case x : SomeType =>
是一种基本模式;代码无法编译的唯一方法是SomeType
不可见。但是,据推测,这并没有多大用处!
可能会出现编译器插件与用户注释同时执行此操作,但这不是我的专业领域,但我想它可能看起来像:
@unmatchable class CreditCard( ... )
但接下来的问题是你不能真正强制执行你的“客户”会使用这个插件(除非,我想,你确保你的代码不会在没有它的情况下编译 - 不是我知道你怎么能实现这一点)