如果我有一個對象的實例,有沒有辦法檢查我是否有單例對象而不是類的實例? 有沒有什麼方法可以做到這一點?可能是一些反射API? 我知道一個區別是單身人員對象的類名以$
結尾,但這不是一個嚴格的方法。在scala中,有沒有辦法檢查一個實例是否是單例對象?
10
A
回答
22
是的,使用小記錄scala.Singleton
類型:
def isSingleton[A](a: A)(implicit ev: A <:< Singleton = null) =
Option(ev).isDefined
然後:
scala> val X = new Foo(10)
X: Foo = [email protected]
scala> object Y extends Foo(11)
defined object Y
scala> isSingleton(X)
res0: Boolean = false
scala> isSingleton(Y)
res1: Boolean = true
我isSingleton
方法僅僅是提供了一個運行時布爾值,它會告訴你是否示範表達式是靜態類型爲單例類型,但是您也可以在編譯時使用Singleton
作爲證據,表明類型是單例類型。
0
這裏就是我發現這個問題的最佳解決方案:
import scala.reflect.runtime.currentMirror
def isSingleton(value: Any) = currentMirror.reflect(value).symbol.isModuleClass
基礎上How to determine if `this` is an instance of a class or an object?
相關問題
- 1. 有沒有辦法檢查兩個對象在Java中是否是別名?
- 2. 在沒有示例實例的情況下,scala中是否有方法來生成一個通用實例?
- 3. 檢查一個對象是否已經在Java中實例化
- 4. 有沒有辦法檢查param是否包含類或類實例?
- 5. 檢查一個實例變量是否有一個或多個對象?
- 6. 木偶:檢查一個佈局是否有另一個對象的實例
- 7. 有沒有辦法在Groovy中檢查類或對象是否有混合?
- 8. 有沒有辦法獲得創建另一個對象的對象的實例?
- 9. 使用RSpec檢查是否有其他對象的實例
- 10. 如何檢查一個對象是否被實例化?
- 11. 檢查對象是否具有單例類
- 12. 調試時,有沒有辦法判斷一個對象是不是一個實例?
- 13. 有沒有辦法從Scala中的實例中刪除特質?
- 14. 有沒有辦法在c#中查詢流,例如。 select * from一個流對象
- 15. 有沒有辦法確定一個類是Java中的一個實例?
- 16. 有沒有辦法檢查一個var是否使用setInterval()?
- 17. 有沒有辦法檢查一個屬性是否超載?
- 18. 有沒有辦法檢查下一個令牌是否結束?
- 19. 有沒有辦法在ec2實例中獲取實例ID
- 20. 如何檢查一個值是不是靜態類型的Scala單例對象?
- 21. Python:如何檢查一個對象是否是namedtuple的一個實例?
- 22. 如何檢查對象是否是IE中NodeList的實例?
- 23. 有沒有辦法在c#中創建一個sqllocaldb實例?
- 24. 有沒有辦法檢測對象是否被鎖定?
- 25. 有沒有辦法檢查一個變量是否是JavaScript中的日期?
- 26. 如何檢查傳統ASP中是否存在對象實例?
- 27. 有沒有辦法在rails中搭建一個單例資源?
- 28. 有沒有辦法在.NET中檢查Bitmap是否爲空?
- 29. 有沒有辦法檢查代碼是否在TransactionScope中執行?
- 30. 如何檢查對象是否是特定類的實例?
爲什麼不使用'EV NE null',而不是'個選項(EV).isDefined'? – Clashsoft
@Clashsoft沒有特別的理由。 'null'默認值是一種黑客行爲,因爲它不是真正的重點,我只是想盡可能保持原則。 –
另外,你確定'scala.Singleton'(仍然)存在嗎?它不在'2.11'文檔中,也不能在GitHub庫中找到?也許你可以添加一個鏈接 – Clashsoft