[英]how to disallow pattern matching on certain classes in scala
與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,而不僅僅是在實例上進行匹配。
有沒有?
我真的沒有看到任何純粹在代碼中實現這一點的方法:
case x : SomeType =>
是一種基本模式; 代碼無法編譯的唯一方法是SomeType
不可見。 但是,據推測,這並沒有多大用處!
可能是編譯器插件與用戶注釋相結合可能會這樣做 - 但這不是我的專業領域,但我想它可能看起來像:
@unmatchable class CreditCard( ... )
但是接下來的問題是你無法真正強制你的“客戶”會使用這個插件(除非,我想,你確保你的代碼在沒有它的情況下不能編譯 - 不是我知道如何實現它)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.