簡體   English   中英

如何禁止scala中某些類的模式匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM