gpt4 book ai didi

hibernate - 如何在scala中禁止某些类的模式匹配

转载 作者:行者123 更新时间:2023-12-05 00:38:10 24 4
gpt4 key购买 nike

与 hibernate 代理匹配的 Scala 模式不适用于继承对象列表。为了解决这个问题,我将 hibernate 对象包装在 case 类中,参见 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 仅在解构对象时调用,而不仅仅是在实例上匹配。

有什么想法吗?

最佳答案

我真的没有看到任何纯粹在代码中实现这一点的方法:

case x : SomeType =>

是基本模式;代码无法编译的唯一方法是如果 SomeType不可见。但是,想必,这并没有多大用处!

可能是 编译器插件 串联用户注释但是,可以这样做 - 这不是我的专业领域,但我想它可能看起来像:
@unmatchable class CreditCard( ... )

但是这里的问题是你不能真正强制你的“客户”使用插件(除非,我想,你确保你的代码没有它就不会编译 - 不是我知道你怎么能做到这一点)

关于hibernate - 如何在scala中禁止某些类的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6020321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com